Sentencia DECLARE HANDLER

La sentencia DECLARE HANDLER crea un manejador de errores para manejar las excepciones.

SINTAXIS

Puede declarar gestores tanto en ámbitos declarados explícitamente (BEGIN...END) como en ámbitos declarados implícitamente (por ejemplo, la cláusula ELSE de una sentencia IF). Sin embargo, todas las declaraciones de manejadores deben estar juntas al principio del ámbito, antes de cualquier otra sentencia.

Si no se producen excepciones, la presencia de gestores no afecta al comportamiento ni al rendimiento de un programa SQL. Si se produce una excepción, WebSphere Message Broker compara el estado SQL de la excepción con los estados SQL asociados a cualquier gestor relevante, hasta que o bien la excepción deja el nodo (como lo haría si no hubiera gestores) o bien se encuentra un gestor que coincide. Dentro de cualquier ámbito, los gestores se buscan en el orden en que se han declarado; es decir, del primero al último. Los ámbitos se buscan desde los más internos a los más externos.

Los valores de estado SQL proporcionados en sentencias DECLARE... HANDLER... pueden compararse directamente con el estado SQL de la excepción o pueden compararse utilizando caracteres comodín. Para comparar los valores de estado directamente, especifique VALUE o no especifique ningún operador de condición. Para efectuar una comparación con comodín, utilice los caracteres de subrayado y de porcentaje para representar comodines de un solo o varios caracteres, respectivamente, y especifique el operador LIKE. El método de comodines permite manejar todas las excepciones de un tipo general sin tener que listarlas exhaustivamente.

Si se encuentra un gestor que coincide, se actualiza SQLSTATE y otros registros especiales (según las normas descritas más abajo) y se procesa la sentencia del gestor.

Puesto que la sentencia del gestor debe ser una sola sentencia, normalmente es una sentencia compuesta (como BEGIN...END) que contiene varias sentencias más. No hay ningún comportamiento especial asociado a estas sentencias internas y no hay limitaciones especiales. Por ejemplo, pueden incluir RETURN, ITERATE o LEAVE; éstos afectan a las construcciones de bucles y a las rutinas que contienen, de la misma manera que si estuvieran contenidas en el ámbito mismo.

Los gestores pueden contener gestores de excepciones que se produzcan dentro del gestor mismo.

Si el proceso del código del gestor se completa sin generar excepciones no manejadas adicionales, se reanuda la ejecución del código normal, del modo siguiente:
  • Para gestores EXIT, la siguiente sentencia procesada es la primera sentencia después del ámbito del gestor.
  • Para gestores CONTINUE, es la primera sentencia contenida directamente después de la que ha generado la excepción.

Cada gestor tiene sus propios registros especiales SQLCODE, SQLSTATE, SQLNATIVEERROR y SQLERRORTEXT. Éstos entran en el ámbito y sus valores se establecen justo antes de que se ejecute la primera sentencia del gestor. Siguen siendo válidos hasta que se ha ejecutado la última sentencia del gestor. Puesto que los valores SQLSTATE no se pasan de un gestor a otro, los gestores pueden escribirse de forma independiente.

Los gestores absorben las excepciones, impidiendo que lleguen al nodo de entrada y hagan que la transacción se confirme en lugar de que se restituya. Un gestor puede utilizar una sentencia RESIGNAL o THROW para impedirlo.

Ejemplo

-- Eliminar las tablas para que se puedan volver a crear con la definición más reciente.
-- Si el programa no se ha ejecutado nunca anteriormente, se producirán errores
-- porque no puede eliminar tablas que no existen. Ignoramos estos errores.
  BEGIN
    DECLARE CONTINUE HANDLER FOR SQLSTATE LIKE'%' BEGIN END;

    PASSTHRU 'DROP TABLE Shop.Customers' TO Database.DSN1;
    PASSTHRU 'DROP TABLE Shop.Invoices'  TO Database.DSN1;
    PASSTHRU 'DROP TABLE Shop.Sales'     TO Database.DSN1;
    PASSTHRU 'DROP TABLE Shop.Parts'     TO Database.DSN1;
  END;
Conceptos relacionados
Visión general de ESQL
Tareas relacionadas
Desarrollo de ESQL
Referencia relacionada
Sentencia RESIGNAL
Diagramas de sintaxis: tipos disponibles
Sentencias ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak20700_