El árbol ExceptionList tiene su propio nombre de correlación, ExceptionList, y debe utilizarlo en todas las sentencias ESQL que hacen referencia o establecen el contenido de este árbol.
Este árbol se crea con el árbol lógico cuando se analiza un mensaje de entrada. Inicialmente está vacío y sólo se rellena si se produce una excepción durante el proceso del flujo de mensajes. Es posible que se produzca más de una excepción, si esto sucede, el árbol ExceptionList contiene un subárbol para cada excepción.
Puede acceder al árbol ExceptionList en los nodos Compute, Database y Filter y puede actualizarlo en un nodo Compute. Debe utilizar el nombre de correlación adecuado, esto es, ExceptionList para un nodo Database o Filter e InputExceptionList para un nodo Compute.
Es posible que desee acceder a este árbol en un nodo de un procedimiento de manejo de errores. Por ejemplo, es posible que desee direccionar el mensaje a una vía de acceso diferente basándose en el tipo de excepción, por ejemplo, uno que haya generado explícitamente utilizando una sentencia ESQL THROW o uno generado por el intermediario.
El ESQL siguiente le muestra cómo puede acceder a ExceptionList y procesar cada hijo que contiene:
-- Declarar una referencia para ExceptionList -- (en un nodo Compute utilizar InputExceptionList) DECLARE start REFERENCE TO ExceptionList.*[1]; -- Crear un bucle por los hijos de la lista de excepciones WHILE start.Number IS NOT NULL DO -- más ESQL -- Trasladar el inicio al último hijo del campo al que apunta actualmente MOVE start LASTCHILD; END WHILE;
El segundo ejemplo que se muestra a continuación contiene un ejemplo de ESQL que se ha codificado para que un nodo Compute cree un bucle por la lista de excepciones hasta la descripción de la última excepción (anidada) y extraiga el número de error. Este error se relaciona con la causa original del problema y normalmente proporciona la información más precisa. La acción que el flujo de mensajes lleva a cabo a continuación puede decidirse según el número de error que se recupere de este modo.
-- Declarar la variable para el número de error extraído de la lista de excepciones DECLARE Error INTEGER; -- Declarar la vía de acceso actual en la lista de excepciones DECLARE Path CHARACTER; -- Iniciar un primer hijo de la lista de excepciones SET Path = 'InputExceptionList.*[1]'; -- Crear un bucle hasta que no haya más hijos WHILE EVAL( 'FIELDNAME(' || Path || ') IS NOT NULL' ) DO -- Comprobar si el número de error está disponible IF EVAL( 'FIELDNAME(' || Path || '.Number) IS NOT NULL' ) THEN -- Registrar solo el número de error más profundo SET Error = EVAL( Path || '.Number' ); END IF; -- Pasar al último hijo del elemento actual (generalmente una lista de excepciones anidada) SET Path = Path || '.*[<]'; END WHILE;
Para obtener más información acerca del uso de ExceptionList, consulte el subflujo en el ejemplo Manejador de errores, que incluye ESQL que cuestiona la estructura de ExceptionList y lleva a cabo una acción específica según su contenido.