Si se produce un error al acceder a una base de datos externa, tiene dos opciones:
La primera es la opción por omisión; se abandona el proceso de ESQL en el nodo actual. A continuación, la excepción se propaga en sentido inverso a través del flujo de mensajes hasta que alcanza un nodo de captación o el nodo de entrada de este flujo de mensajes. Si la excepción alcanza el nodo de entrada, se restituirán las transacciones que existan.
La segunda opción requiere entender los códigos de retorno de base de datos y el rumbo de acción lógico que se debe tomar cuando se produzca un error. Para habilitar este proceso de errores de base de datos en línea, debe borrar la propiedad Generar excepción en error de la base de datos del nodo Filter, Database o Compute. Si hace esto, el nodo establecerá los cuatro indicadores de estado de base de datos: SQLCODE, SQLSTATE, SQLNATIVEERROR y SQLERRORTEXT, con información adecuada del gestor de bases de datos, en lugar de emitir una excepción.
Los indicadores sólo contienen información cuando se produce un error (no un aviso), a menos que haya seleccionado la propiedad Tratar los avisos como errores. En caso de que el resultado de las operaciones de base de datos de información sea satisfactorio, los indicadores contendrán sus valores por omisión de resultado satisfactorio.
Puede utilizar los valores contenidos en estos indicadores en las sentencias ESQL para tomar decisiones sobre la acción que se debe realizar. Puede acceder a estos indicadores con las funciones SQLCODE, SQLSTATE, SQLNATIVEERROR y SQLERRORTEXT.
Si intenta realizar un proceso de errores en línea, debe comprobar los indicadores de estado después de ejecutar cada sentencia de base de datos para asegurarse de que ha captado y evaluado todos los errores. Al procesar los indicadores, si encuentra un error que no puede manejar en línea, puede activar una nueva excepción para tratarla en sentido ascendente en un nodo de captación, o dejarla llegar al nodo de entrada para que se restituya la transacción. Para ello, puede utilizar la sentencia ESQL THROW.
Tal vez desee comprobar el caso especial en que SELECT no devuelve ningún dato. Esta situación no se considera un error y no se establece SQLCODE, por lo que debe probarla de forma explícita. Este tema se describe en el apartado Comprobación de las devoluciones de SELECT.
El ejemplo siguiente de ESQL muestra cómo utilizar las cuatro funciones de estado de base de datos y cómo incluir la información de error que se devuelve en una excepción:
DECLARE SQLState1 CHARACTER; DECLARE SQLErrorText1 CHARACTER; DECLARE SQLCode1 INTEGER; DECLARE SQLNativeError1 INTEGER; -- Crear 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 los 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 es necesario emitir una excepción al detectar un error de base de datos; tal vez 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 subflujos de error o resultado correcto según los valores guardados.
El programa de ejemplo Línea aérea proporciona otro ejemplo de ESQL que utiliza estas funciones de base de datos.
Conceptos relacionados
Flujos de mensajes
Árbol ExceptionList
ESQL
Diseño de mensajes
Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Manejo de errores en flujos de mensajes
Gestión de archivos ESQL
Comprobación de las devoluciones de SELECT
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Funciones de estado de base de datos ESQL
Sentencia DECLARE
Sentencia INSERT
Sentencia SET
Sentencia THROW
Avisos |
Marcas registradas |
Descargas |
Biblioteca |
Soporte |
Información de retorno (feedback)
![]() ![]() |
ak05840_ |