Documente Academic
Documente Profesional
Documente Cultură
TRATAMIENTO DE ERORES
SQL Server proporciona el control de errores a
travs de las instrucciones TRY y CATCH.
Estas nuevas instrucciones suponen un gran paso
adelante en el control de errores en SQL Server.
TRATAMIENTO DE ERORES
Begin try
Expresion_sql
End try
Begin catch
Expresion_sql
End catch
TRATAMIENTO DE ERORES
Funciones especiales de Error
Las funciones especiales de error, estn disponibles
nicamente en el bloque CATCH para la obtencin de
informacin detallada del error.
A continuacin, presentamos las funciones que se utilizan
en el control de errores.
TRATAMIENTO DE ERORES
Funciones especiales de Error
ERROR_NUMBER(): Devuelve el numero de error
ERROR_SEVERITY(): Devuelve la severidad del error
ERROR_STATE(): Devuelve el estado del error
ERROR_PROCEDURE(): Devuelve el nombre del
procedimiento almacenado que ha provocado el error
ERROR_LINE(): Devuelve el nmero de lnea en la que
se ha producido el error.
ERROR_MESSAGE(): Devuelve el mensaje de error
TRATAMIENTO DE ERORES
Errores no afectados por una construccin
TRYCATCH
Las construcciones TRYCATCH no detectan lo siguiente:
o Advertencias o mensajes informativos que tienen una
gravedad 10 o inferior.
o Errores que tienen la gravedad 20 o superior que
detienen el procesamiento de las tareas de Motor de
base de datos de SQL Server en la sesin. Si se produce
un error con una gravedad 20 o superior y no se
interrumpe la conexin con la base de datos,
TRYCATCH controlar el error.
TRATAMIENTO DE ERORES
Errores no afectados por una construccin TRYCATCH
Las construcciones TRYCATCH no detectan lo siguiente:
o Atenciones, como solicitudes de interrupcin de clientes
o conexiones de cliente interrumpidas.
o Cuando el administrador del sistema finaliza la sesin
mediante la instruccin KILL.
TRATAMIENTO DE ERORES
Errores no afectados por una construccin TRYCATCH
Un bloque CATCH no controla los siguientes tipos de
errores cuando se producen en el mismo nivel de ejecucin
que la construccin TRYCATCH:
Errores de compilacin, como errores de sintaxis, que
impiden la ejecucin de un lote.
Errores que se producen durante la recompilacin de
instrucciones, como errores de resolucin de nombres de
objeto que se producen despus de la compilacin
debido a una resolucin de nombres diferida.
PROBLEMAS PRCTICOS
--Resultado de la Ejecucin
SE HA PRODUCIDO UN ERROR
ErrorState ErrorProcedure
8
ErrorLine ErrorMessage
Error de divisin entre cero.
BEGIN CATCH
PRINT ERROR_MESSAGE()
PRINT ERROR_STATE()
END CATCH;
--Resultado de la Ejecucin
Error de divisin entre cero.
1
TRATAMIENTO DE ERORES
Variable de sistema @@ERROR
Devuelve el nmero de error de la ltima
instruccin TRANSACT-SQL ejecutada; si la
variable devuelve 0, la TRANSACT-SQL anterior
no encontr errores.
TRATAMIENTO DE ERORES
Variable de sistema @@ERROR
La variable @@ERROR devuelve un nmero de error que
representa el error de la operacin. Si el error se encuentra
en la vista de catlogo sys.sysmessages, entonces
@@ERROR, contendr el valor de la columna
sys.sysmessages.error para dicho error. Puede ver el texto
asociado con el nmero de error @@ERROR en
sys.sysmessages.description
--Resultado de la Ejecucin
(0 filas afectadas)
Proveedor con Registros enlazados.
547
--Resultado de la Ejecucin
(0 filas afectadas)
Ya existe un registro de estudiantes con esos datos.
2627
TRATAMIENTO DE ERORES
Generar un error RAISERROR
En ocasiones, es necesario provocar voluntariamente un
error, por ejemplo nos puede interesar que se genere un
error cuando los datos incumplen una regla de negocio.
Podemos provocar un error en tiempo de ejecucin a travs
de la funcin RAISERROR.
La funcin RAISERROR recibe tres parmetros, el mensaje
del error (o cdigo de error predefinido), la severidad y el
estado.
TRATAMIENTO DE ERORES
Generar un error RAISERROR
La severidad indica el grado de criticidad del error. Admite
valores de 0 al 25, pero solo podemos asignar valores del 0
al 18. Los errores el 20 al 25 son considerados fatales por
el sistema, y cerraran la conexin que ejecuta el comando
RAISERROR.
Para asignar valores del 19 al 25, necesitaremos ser
miembros de la funcin de SQL Server sysadmin.
--Resultado de la Ejecucin
Sin error en la ejecucin
Mens. 50000, Nivel 3, Estado 1
--Resultado de la Ejecucin
Mens 50000, Nivel 16, Estado 1, Procedimiento PROC_RAISERROR_REGISTRO_ESTUDIANTE, Lnea 22
Se requiere por lo menos el nombre y apellido del Estudiante
PROBLEMAS PROPUESTOS
PROBLEMAS PROPUESTOS
/*
PROBLEMA PROPUESTO N1. Escribir el cdigo SQL que permita
verificar si existe el registro de un docente con los datos de
entrada. Si el registro exste con el nombre y el apellido, se
genere un error indicando que ya existe un registro del docente
utilizando la instruccin RAISERROR
*/
/*
Escriba el cdigo SQL para lanzar una advertencia cuando para un
curso especificado no hallan cupos disponibles segn una cantidad
establecida. Cuando la cantidad es por debajo del umbral igual se
indica con un mensaje que hay cupos disponible.
*/
FIN DE LA SESIN