A árvore ExceptionList possui seu próprio nome de correlação, ExceptionList e é necessário utilizá-lo em todas as instruções ESQL que fazem referência ou definem o conteúdo dessa árvore.
Essa árvore é criada quando a árvore lógica é criada, quando uma mensagem de entrada é analisada. Ela está inicialmente vazia e será ocupada apenas se ocorrer uma exceção durante o processamento do fluxo de mensagens. É possível que possa ocorrer mais de uma exceção; se isso ocorrer, a árvore Lista de Exceção conterá uma subárvore para cada exceção.
Você pode acessar a árvore Lista de Exceção nos nós Compute, Database e Filter e pode atualizá-la em um nó Compute. Você deve utilizar o nome de correlação adequado; a Lista de Exceções de um nó Database ou Filter, e InputExceptionList para um nó Compute.
Talvez você queira acessar essa árvore em um nó em um procedimento de tratamento de erros. Por exemplo, talvez você queira rotear a mensagem para um caminho diferente, com base no tipo de exceção, por exemplo, uma que foi gerada explicitamente utilizando uma instrução ESQL THROW ou uma que foi gerada pelo intermediário.
O ESQL a seguir mostra como você pode acessar a Lista de Exceção e processar cada filho que ela contém:
-- Declare a reference for the ExceptionList -- (em um nó Compute, utilize InputExceptionList) DECLARE start REFERENCE TO ExceptionList.*[1]; -- Loop through the exception list children WHILE start.Number IS NOT NULL DO -- more ESQL -- Move start to the last child of the field to which it currently points MOVE start LASTCHILD; END WHILE;
O segundo exemplo a seguir mostra um extrato do ESQL codificado para um nó Compute para executar um loop através da lista de exceções para a descrição da última exceção (aninhada) e extrair o número do erro. Esse erro está relacionado à causa original do problema e normalmente fornece as informações mais precisas. A ação seguinte tomada pelo fluxo de mensagens pode ser resolvida pelo número do erro recuperado desta forma.
CREATE PROCEDURE getLastExceptionDetail(IN InputTree reference,OUT messageNumber integer, OUT messageText char) /**************************************************************************** * A procedure that will get the details of the last exception from a message * IN InputTree: The incoming exception list * IN messageNumber: The last message numberr. * IN messageText: The last message text. *****************************************************************************/ BEGIN -- Create a reference to the first child of the exception list declare ptrException reference to InputTree.*[1]; -- keep looping while the moves to the child of exception list work WHILE lastmove(ptrException) DO -- store the current values for the error number and text IF ptrException.Number is not null THEN SET messageNumber = ptrException.Number; SET messageText = ptrException.Text; END IF; -- now move to the last child which should be the next exceptionlist move ptrException lastchild; END WHILE; END;
Para obter informações adicionais sobre a utilização de ExceptionList, consulte o subfluxo na amostra Rotina de Tratamento de Erros que inclui o ESQL que interroga a estrutura de ExceptionList e executa a ação específica, de acordo com seu conteúdo.