Cómo manejar condiciones sql

Usted puede tener su mirada programa en SQLSTATE

después de la ejecución de cada sentencia SQL. Hay varias posibilidades para lo que es posible que desee hacer a continuación. ¿Qué se hace con el conocimiento que usted gana?

  • Si usted encuentra un código de clase de 00, es probable que no quiere hacer nada. ¿Quieres ejecución para proceder como lo planeado originalmente.

  • Si usted encuentra un código de clase de 01 o 02, es posible que desee tomar medidas especiales. Si usted espera que el " Advertencia " o " no encontrada " indicación, probablemente quiere dejar ejecución proceder. Si usted no esperaba cualquiera de estos códigos de clase, es probable que desee tener la rama de ejecución de un procedimiento que está diseñado específicamente para manejar lo inesperado, pero no totalmente inesperado, advertencia o no encontró resultados.

  • Si recibe cualquier otro código de clase, algo está mal. Usted debe pasar a un procedimiento de control de excepciones. ¿Qué procedimiento decide pasar a depende de los contenidos de los tres personajes de subclase, así como los dos personajes de clase de SQLSTATE. Si hay varias excepciones diferentes son posibles, no debe haber un procedimiento de control de excepciones para cada uno porque diferentes excepciones a menudo requieren diferentes respuestas.

    Usted puede ser capaz de corregir algunos errores o encontrar soluciones. Otros errores pueden ser fatales- nadie va a morir, pero puede llegar a tener para terminar la aplicación.

Declaraciones Handler

Usted puede poner un manejador de condiciones dentro de una sentencia compuesta. Para crear un manejador de condiciones, primero debe declarar la condición de que se manejará. La condición declarada puede ser algún tipo de excepción, o simplemente puede ser algo que es verdad. Estas son algunas de las condiciones posibles.

CondiciónDescripción
SQLSTATE VALUE'xxyyy 'Específica SQLSTATE valor
SQLEXCEPTIONSQLSTATE clase distinta de 00, 01, o 02
SQLWARNINGSQLSTATE clase 01
EXTRAVIADOSQLSTATE clase 02

El siguiente es un ejemplo de una declaración de condición:

'23000' -END BEGINDECLARE constraint_violation CONDITIONFOR SQLSTATE VALOR -

Este ejemplo no es realista, ya que por lo general la sentencia SQL que puede causar la condición que ocurra -, así como el controlador que se invoca si se produjo la condición - también estaría incluido dentro de la COMIENZO # 133-END estructura.

Acciones Handler y efectos de controlador

Si una condición ocurre que invoca un manejador, la acción especificada por el manejador se ejecuta. Este acción no es una sentencia de SQL, que puede ser una sentencia compuesta. Si la acción manejador completa con éxito, entonces el efecto controlador ejecuta. La siguiente es una lista de los tres posibles efectos de controlador:

  • CONTINUAR: Continuar la ejecución inmediatamente después de la declaración que hizo el manejador que se invoque.

  • SALIDA: Continuar la ejecución después de la sentencia compuesta que contiene el manejador.

  • DESHACER: Deshacer el trabajo de las declaraciones anteriores de la sentencia compuesta y luego continuar la ejecución después de la declaración que contiene el manejador.

Si el manejador puede corregir cualquier problema que invoca el controlador, entonces el CONTINUAR efecto puede ser apropiado. los SALIDA efecto puede ser apropiada si el controlador no soluciona el problema, pero los cambios realizados en la sentencia compuesta no necesita ser deshecho. los DESHACER efecto es apropiado si usted quiere devolver la base de datos al estado en que se encontraba antes de la sentencia compuesta comenzó la ejecución.

Considere el siguiente ejemplo:

EMPEZAR constraint_violation ATOMICDECLARE CONDITIONFOR SQLSTATE VALOR '23000' -DECLARE DESHACER HANDLERFOR constraint_violationRESIGNAL -Insertar EN estudiantes (studentID, Fname, Lname) VALUES (: sid,: sfname,: slname) -Insertar EN roster (ClassID, Clase, studentID) VALUES (: cid,: cname,: sid) -END -

Si cualquiera de las INSERT declaraciones provoca una violación de restricción, como tratando de agregar un registro con una clave principal que duplica una clave principal que ya están en la mesa, SQLSTATE asume un valor de '23000', estableciendo así la constraint_violation condición para un valor verdadero.

Esta acción hace que el manejador de DESHACER los cambios que se han hecho a las tablas por cualquiera INSERT comandos. los RESIGNAL transferencias sentencia de control de nuevo al procedimiento que llamó al procedimiento que se está ejecutando.

Si ambos INSERT sentencias se ejecutan con éxito, la ejecución continúa con la instrucción que sigue el FIN palabra clave.

los ATÓMICA la palabra clave es obligatoria siempre que el efecto de un controlador es DESHACER. Este no es el caso para los manipuladores cuyo efecto es o bien CONTINUAR o SALIDA.




» » » » Cómo manejar condiciones sql