sql server aplicado (ssa010)
DESCRIPTION
DuocUC. SQL SERVER APLICADO (SSA010). Ariel Alexis Fierro Sáez [email protected]. Manejo de errores. Al igual que los lenguaje de programación transactSQL también provee los mecanismos necesarios para el control de errores. - PowerPoint PPT PresentationTRANSCRIPT
![Page 2: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/2.jpg)
Manejo de errores• Al igual que los lenguaje de programación transactSQL también provee
los mecanismos necesarios para el control de errores.
• TRY….CATCH permite un grupo de instrucciones transactSQL en el bloque TRY. Si de produce un error en este bloque, el control se transfiere a otro grupo de instrucciones que esta incluido en un bloque CATCH
BEGIN TRYsql_statement…..
END TRYBEGIN CATCH
sql_statement …..
END CATCH
![Page 3: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/3.jpg)
Manejo de errores• En el ámbito de un bloque CATCH, se pueden utilizar las
siguientes funciones del sistema para obtener información acerca del error que provocó la ejecución del bloque CATCH:
▫ ERROR_NUMBER() devuelve el número del error. ▫ ERROR_SEVERITY() devuelve la gravedad. ▫ ERROR_STATE() devuelve el número de estado del error. ▫ ERROR_PROCEDURE() devuelve el nombre del procedimiento
almacenado o desencadenador donde se produjo el error. ▫ ERROR_LINE() devuelve el número de línea de la rutina que provocó
el error. ▫ ERROR_MESSAGE() devuelve el texto completo del mensaje de error.
Este texto incluye los valores suministrados para los parámetros remplazables, como longitudes, nombres de objetos u horas.
NOTA: Estas funciones devuelven NULL si se las llama desde fuera del ámbito del bloque CATCH
![Page 4: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/4.jpg)
Manejo de errores• Un bloque CATCH puede contener una construcción TRY…
CATCH incrustada para controlar los errores detectados por el código de CATCH.
BEGIN TRY<sql_statement1>….
END TRYBEGIN CATCH
<sql_statement2>…..BEGIN TRY
<sql_statement3>…..
END TRYBEGIN CATCH
<sql_statement4>…..
END CATCHEND CATCH
![Page 5: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/5.jpg)
Manejo de errores• En los bloques CATCH anidados, cualquier TIPO DE ERROR
devuelve el error específico para el ámbito del bloque CATCH donde se hace referencia a él.
BEGIN TRY //try…catch externo<sql_statement1>….
END TRYBEGIN CATCH
PRINT ERROR_MESSAGE() // referencia al error producido en TRY externo…..BEGIN TRY // try…catch interno
PRINT ERROR_MESSAGE() // referencia al error producido en TRY externo
<sql_statement3>…..
END TRYBEGIN CATCH
PRINT ERROR_MESASAGE() //referencia al error producido en TRY interno
…..END CATCH
END CATCH
![Page 6: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/6.jpg)
Manejo de errores• Muchas veces es necesario provocar voluntariamente un error,
por ejemplo nos puede interesas que se genere un error cuando los datos incumplen una regla de negocio.
• RAISERROR genera un error voluntario e inicia el procesamiento de errores de la sesión.▫ RAISERROR (<mensaje_error>,
<severidad_error>,<estado_error>)
• Condiciones▫ Dentro de un bloque TRY▫ Severidad del error entre 0 y 18. Los error de 19 a 25 se
consideran errores fatales de sistema, solo los usuarios del grupo sysadmin pueden asignar dichos valores
▫ Error con estados entre 1 a 127.
![Page 7: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/7.jpg)
Manejo de errores• Ejemplo RAISERROR:
DECLARE @nombre varchar(20), @edad int SET @nombre = ‘Jose’ SET @edad= 10
IF (@edad>0 AND @edad< 18) BEGIN
RAISERROR (‘Solo pueden ingresar mayor a 18 años’', 16, -- Severidad 1 -- Estado )
END
![Page 8: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/8.jpg)
Procedimiento almacenado• Un procedimiento almacenado (stored procedure) es un
programa que se encuentra almacenado físicamente en la base de datos para ser utilizado en cualquier momento. Algunas de sus características son:
▫ Aceptan parámetro de entrada
▫ Pueden devolver un valor o un conjunto de valores
▫ Contienen instrucciones que realizan operaciones sobre la base de datos
▫ Son ejecutadas del lado del servidor de base de datos.
![Page 9: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/9.jpg)
Procedimiento almacenado• Creación de procedimiento almacenado, sin parámetro salida.
CREATE PROCEDURE <nombre_procedimiento> [@param1 <tipo>, ………]ASBEGINsql_statement…….END
• Creación de procedimiento almacenado, con parámetro salida.
CREATE PROCEDURE <nombre_procedimiento> [@param1 <tipo>, ….., @variable <tipo> OUTPUT]ASBEGINsql_statement…….END
![Page 10: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/10.jpg)
Procedimiento almacenado• Modificación de un procedimiento almacenado
ALTER PROCEDURE <nombre_procedimiento> [@param1 <tipo>, ………]ASBEGINsql_statement…….END
• Eliminación de un procedimiento almacenado
DROP PROCEDURE <nombre_procedimiento>
• Ejecución de un procedimiento almacenado
EXEC <nombre_procedimiento> [<param1>, <param2>,…….. , [@variable <tipo> OUTPUT] ]
![Page 11: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/11.jpg)
Ejercicios • Crear un procedimiento almacenado que permita calcular el
porcentaje de producto productos cargados a un camión. Considere que estado 40 corresponde que un cartón se encuentra ya cargado en el camión.
• Defina un script que liste todos los equipos indicando el porcentaje de carga de los cartones asignados, en caso de no tener carga de trabajo el equipo indicarlo.
• Usando la base de datos Agenda. Crear un procedimiento almacenado que permita realizar un despido de una persona, además el programa deberá entregar como resultado la cantidad de dinero que se le pagara por los años de servicios. Considere que el calculo de la indemnización será la suma de la gratificación y el sueldo base de todos los contratos que pueda tener el empleado, además se deberá considerar la fecha de contrato mas antigua para determinar los años de antigüedad.
![Page 12: SQL SERVER APLICADO (SSA010)](https://reader036.vdocumento.com/reader036/viewer/2022083015/56813898550346895da04843/html5/thumbnails/12.jpg)
Referencias• TRY...CATCH (Transact-SQL)
http://msdn.microsoft.com/es-es/library/ms175976.aspx
• Procedimientos almacenados (motor de base de datos)http://msdn.microsoft.com/es-es/library/ms190782.aspx