Cómo manejar las condiciones sql

Usted puede tener su mirada en el programa de SQLSTATE después de la ejecución de cada instrucción 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 encuentra un código de clase de 00, es probable que no quiere hacer nada. ¿Quieres ejecución de proceder como lo planeado originalmente.

  • Si encuentra un código de clase de 01 o 02, es posible que desee tomar una acción especial. Si se espera que la indicación o “Advertencia” “no encontrado”, es probable que desee dejar que la 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 inesperada, advirtiendo o no se encontró resultado.

  • Si recibe cualquier otro código de clase, algo está mal. Usted debe pasar a un procedimiento de control de excepciones. ¿Qué procedimiento que elija para trasladarse hasta depende de los contenidos de los tres caracteres 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 respuestas diferentes.

    Video: Consultas simples SQL - La sentencia SELECT (11)

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

declaraciones de manejadores

Usted puede poner una manejador de condiciones dentro de una sentencia compuesta. Para crear un manejador de condiciones, primero debe declarar la condición que va a manejar. La condición puede ser declarado algún tipo de excepción, o simplemente puede ser algo que es verdad. Aquí hay algunas condiciones posibles.

CondiciónDescripción
valor de SQLSTATE
&lsquo-xxyyy&rsquo-
Específico SQLSTATE valor
SQLEXCEPTIONSQLSTATE clase distinta 00, 01, o 02
SQLWARNINGSQLSTATE clase 01
EXTRAVIADOSQLSTATE clase 02

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

Video: Usar el if en sql server y en procedimientos almacenados

BEGINDECLARE constraint_violation CONDITIONFOR SQLSTATE VALOR `23000` -END -

Este ejemplo no es realista, ya que normalmente la instrucción SQL que pueden 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 BEGIN ... END estructura.

Handler acciones y efectos de controlador

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

Video: Video Tutorial 1 SQL en español. Instalar MYSQL y primeras consultas SQL con MySql Workbench

  • CONTINUAR: Continuar la ejecución inmediatamente después de la instrucción que causó el manejador que se invoca.

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

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

    Video: Tutorial SQL: GROUP BY / HAVING

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.

Consideremos el siguiente ejemplo:

COMENZAR ATOMICDECLARE constraint_violation CONDITIONFOR SQLSTATE VALOR `23000` -DECLARE DESHACER HANDLERFOR constraint_violationRESIGNAL -INSERT EN estudiantes (studentID, Fname, Lname) VALUES (SID:,: sfname,: slname) -INSERT EN plantel (ClassID, Clase, studentID) VALORES (: cid,: cname,: SID) -END -

Si alguna de las INSERTAR declaraciones provoca una violación de restricción, como se trata de añadir 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 a un valor verdadero.

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

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

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

Artículos Relacionados