if (userRequest = "A") try add record1; onException myErrorHandler(12); end end
En general, un bloque try permite que el programa se siga procesando aunque se produzca un error.
El bloque try puede incluir una cláusula onException, como se ha mostrado en el ejemplo anterior. Esta cláusula se invoca si falla una de las sentencias anteriores del bloque try; pero en ausencia de una cláusula onException, un error en un bloque try hace que se invoque la primera sentencia que sigue inmediatamente al bloque try.
EGL proporciona una serie de excepciones del sistema para indicar la naturaleza específica de un problema de tiempo de ejecución. Cada una de estas excepciones es un diccionario desde el que puede recuperar información, pero la recuperación siempre se hace por medio de la variable del sistema SysLib.currentException (también un diccionario), que permite acceder a la excepción mostrada más recientemente en la unidad de ejecución.
if (userRequest = "A") try add record1; onException case (SysLib.currentException.code) when (FileIOException) myErrorHandler(12); otherwise myErrorHandler(15); end end end
En este caso, FileIOException es una constante que es equivalente al valor de serie "com.ibm.egl.FileIOException". La constante de excepción de EGL siempre es equivalente al último calificador de una serie que empieza por "com.ibm.egl".
Se recomienda encarecidamente que acceda a los campos de excepción solo en un bloque onException. La unidad de ejecución termina si el código accede a SysLib.currentException cuando no se ha producido ninguna excepción.
if (userRequest = "A") try add record01; onException case (SysLib.currentException.code) when ("com.ibm.egl.SQLException") if (SysLib.currentException.sqlcode == -270) myErrorHandler(16); else myErrorHandler(20); end otherwise myErrorHandler(15); end end end
Para conocer más detalles sobre las excepciones del sistema, consulte Excepciones del sistema EGL.
El proceso de los desbordamientos numéricos no se ve afectado por la presencia de un bloque try. Para obtener información detallada sobre estos tipos de error, consulte la sección VGVar.handleOverflow.
if (userRequest = "B") try myVariable = myABC(); onException myErrorHandler(12); end end
EGL proporciona variables de sistema relacionadas con errores que se establecen en un bloque try como respuesta a eventos satisfactorios o como respuesta a errores de no terminación. Los valores de dichas variables están disponibles en el bloque try y en el código que se ejecuta después del bloque try y, en la mayoría de los casos, los valores se restauran después de una sentencia converse, si existe.
El entorno de ejecución EGL no cambia el valor de ninguna variable relacionada con errores cuando las sentencias se ejecutan fuera de un bloque try. Sin embargo, el programa puede asignar un valor a una variable relacionada con errores fuera de un bloque try.
Si se produce un error de no terminación en un bloque try, el valor de sysVar.exceptionCode es equivalente al componente numérico del mensaje de error EGL que se presentaría al usuario si el error se produjese fuera del bloque try. Sin embargo, el sistema de ejecución proporciona los valores de las variables específicas de la situación, como por ejemplo sysVar.errorCode y VGVar.mqConditionCode. En ausencia de un error, el valor de sysVar.exceptionCode y de al menos una de las variables específicas de la situación es el mismo: una serie de ocho ceros.
Se asigna un código de error a sysVar.exceptionCode y sysVar.errorCode en el caso de un desbordamiento numérico de no terminación, como se describe en la sección VGVar.handleOverflow; pero un cálculo aritmético satisfactorio no afecta a ninguna de las variables de sistema relacionadas con errores.
Cuando se asigna un valor de error a sysVar.exceptionCode, a la variable de sistema sysVar.exceptionMsg se le asigna el texto del mensaje de error EGL relacionado y a la variable de sistema sysVar.exceptionMsgCount se le asigna el número de bytes del mensaje de error, excluidos los nulos y blancos finales. Cuando se asigna una serie de ocho ceros a sysVar.exceptionCode, se asignan blancos a sysVar.exceptionMsg y sysVar.exceptionMsgCount se establece en cero.
El valor por omisión de esa variable es dependiente del valor de la propiedad handleHardIOErrors , que está disponible en componentes de lógica generable como programas, bibliotecas y pageHandlers. El valor por omisión para la propiedad es yes que establece el valor inicial de la variable VGVar.handleHardIOErrors en 1.
Si se produce un error grave o leve de E/S fuera de un bloque try, el programa generado presenta un mensaje de error, si es posible, y finaliza.
Si accede a DB2 directamente (no a través de JDBC), el sqlcode para un error grave es 304, 802 o menor de 0.
nombreRegistro es valorErrorES nombreRegistro no es valorErrorES
Si no utiliza las expresiones lógicas con valores de error de E/S y luego cambia los sistemas de gestión de base de datos, es posible que necesite modificar y volver a generar el programa. En particular, es aconsejable utilizar los valores de error de E/S para comprobar los errores en lugar del valor de sysVar.sqlcode o sysVar.sqlState. Dichos valores dependen de la implementación de base de datos subyacente.
Conceptos relacionados
Compatibilidad con VisualAge Generator
Diccionario