Captura del estado de la base de datos

Si se produce un error al acceder a una base de datos, tiene dos opciones:

La primera opción es el valor por omisión. Se abandona el proceso de ESQL en el nodo actual. A continuación, se propaga la excepción en sentido inverso por el flujo de mensajes hasta que se alcanza un nodo de captación final o el nodo de entrada de este flujo de mensajes. Si la excepción alcanza el nodo de entrada, se restituye cualquier transacción.

La segunda opción requiere que se comprendan los códigos de retorno de base de datos y se lleve a cabo una acción lógica cuando se produce un error. Para habilitar este proceso de error de base de datos en línea, debe borrar la propiedad Generar excepción en error de la base de datos de los nodos Filter, Database o Compute. Si lo hace, el nodo establece los indicadores de estado de base de datos SQLCODE, SQLSTATE, SQLNATIVEERROR y SQLERRORTEXT con la información adecuada del gestor de base de datos, en lugar de generar una excepción.

Los indicadores contienen información solamente cuando se produce un error (no un aviso), a menos que haya seleccionado la propiedad Tratar los avisos como errores. En el caso de que las operaciones de base de datos sean correctas, los indicadores contienen los valores por omisión para operaciones de información correctas.

Puede utilizar los valores de estos indicadores contenidos en las sentencias ESQL para decidir la acción que debe llevar a cabo. Puede acceder a estos indicadores con las funciones SQLCODE, SQLSTATE, SQLNATIVEERROR y SQLERRORTEXT.

Si intenta procesar errores en línea, debe comprobar los indicadores de estado después de ejecutar cada sentencia de base de datos para asegurarse de que captura y evalúa todos los errores. Si al procesar los indicadores encuentra un error que no puede manejar en línea, puede generar una excepción nueva para manejarlo en un nodo de captación situado en sentido ascendente o dejar que pase por el nodo de entrada y que, de este modo, se restituya la transacción. Puede utilizar la sentencia ESQL THROW para hacerlo:

Es posible que desee comprobar el caso especial en el que una sentencia SELECT no devuelve datos. Esta situación no se considera un error y si no se establece SQLCODE, deberá comprobarla de forma explícita. Esta información se describe en Comprobar las devoluciones de SELECT.

Utilización de ESQL para acceder a los indicadores de estado de base de datos

El siguiente ejemplo ESQL muestra cómo utilizar las cuatro funciones de estado de base de datos y cómo incluir la información de error que devuelve una excepción:

DECLARE SQLState1 CHARACTER;   
DECLARE SQLErrorText1 CHARACTER;   
DECLARE SQLCode1 INTEGER;   
DECLARE SQLNativeError1 INTEGER;  
  
-- Convertir una inserción de base de datos en una tabla que no existe --
INSERT INTO Database.DB2ADMIN.NONEXISTENTTABLE (KEY,QMGR,QNAME) 
                              VALUES (45,'REG356','my TESTING 2');

--Recuperar códigos de retorno de base de datos --
SET SQLState1 = SQLSTATE;
SET SQLCode1 = SQLCODE;
SET SQLErrorText1 = SQLERRORTEXT;
SET SQLNativeError1 = SQLNATIVEERROR;

--Utilizar la sentencia THROW para restituir la base de datos y emitir una excepción de usuario--
THROW USER EXCEPTION MESSAGE 2950 VALUES
( 'The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , 
SQLErrorText1 );

No tiene que generar una excepción cuando detecte un error de base de datos. Es posible que prefiera guardar la información de error devuelta en el árbol LocalEnvironment e incluir un nodo Filter en el flujo de mensajes que direcciona el mensaje a los subflujos de error o de éxito según los valores guardados.

El programa de ejemplo Ejemplo de reserva de vuelos proporciona otro ejemplo de ESQL que utiliza estas funciones de base de datos.

Conceptos relacionados
Visión general de flujos de mensajes
Estructura del árbol Lista de excepciones
Visión general de ESQL
Modelado de mensajes
Codificación de ESQL para manejar errores
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Manejar errores en flujos de mensajes
Gestión de archivos ESQL
Comprobar las devoluciones de SELECT
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
Referencia de ESQL
Funciones de estado de base de datos ESQL
Sentencia DECLARE
Sentencia DECLARE HANDLER
Sentencia INSERT
Sentencia SET
Sentencia THROW
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak05840_