La struttura ad albero ExceptionList ha il proprio nome di correlazione, ExeptionList, ed è necessario utilizzare questo nome in tutte le istruzioni ESQL che fanno riferimento al contenuto di questa struttura ad albero o impostano tale contenuto.
Questa struttura ad albero è creata con la struttura ad albero logica quando viene analizzato un messaggio di input. Inizialmente è vuota e viene popolata solo se si verifica un'eccezione durante l'elaborazione del flusso di messaggi. E' possibile che si verifichi più di un'eccezione; in questo caso, la struttura ad albero ExceptionList contiene una struttura ad albero secondaria per ogni eccezione.
E' possibile accedere alla struttura ad albero ExceptionList nei nodi Compute, Database e Filter ed è possibile aggiornarla in un nodo Compute. E' necessario utilizzare il nome di correlazione appropriato; Exception List per un nodo Database o Filter e InputExceptionList per un nodo Compute.
Si potrebbe accedere a questa struttura ad albero in un nodo all'interno di una procedura di gestione degli errori. Ad esempio, si potrebbe instradare il messaggio su un percorso diverso in base al tipo di eccezione, ad esempio un'eccezione che sia stata generata esplicitamente utilizzando un'istruzione ESQL THROW o una generata dal broker.
Il seguente ESQL mostra come accedere alla struttura ad albero ExceptionList ed elaborare ogni child che contiene:
-- Dichiarare un riferimento per ExceptionList -- (in un nodo Compute utilizzare InputExceptionList) DECLARE start REFERENCE TO ExceptionList.*[1]; -- Eseguire il loop dei child dell'elenco eccezioni WHILE start.Number IS NOT NULL DO -- ulteriore ESQL -- Spostare l'avvio all'ultimo child del campo a cui sta attualmente puntando MOVE start LASTCHILD; END WHILE;
Il secondo esempio riportato sotto mostra un estratto di ESQL codificato affinché un nodo Compute esegua il loop dell'elenco eccezioni fino all'ultima descrizione di eccezione (quella nidificata) ed estragga il numero di errore. Questo errore è relativo alla causa originale del problema e in genere fornisce le informazioni più precise. L'azione successiva intrapresa dal flusso di messaggi può essere decisa in base al numero di errore ottenuto in questo modo.
CREATE PROCEDURE getLastExceptionDetail(IN InputTree reference,OUT messageNumber integer, OUT messageText char) /**************************************************************************** * Una procedura che ottiene i dettagli dell'ultima eccezione da un messaggio * IN InputTree: La lista di eccezioni in entrata * IN messageNumber: L'ultimo numero del messaggio * IN messageText: L'ultimo testo del messaggio *****************************************************************************/ BEGIN -- Creare un riferimento al primo child della lista di eccezioni declare ptrException reference to InputTree.*[1]; -- mantenere il loop mentre sono in funzione i movimenti verso il child della lista di eccezioni WHILE lastmove(ptrException) DO -- memorizzare i valori correnti per il numero e il testo di errore IF ptrException.Number is not null THEN SET messageNumber = ptrException.Number; SET messageText = ptrException.Text; END IF; -- ora andare verso l'ultimo child inteso come exceptionlist successivo move ptrException lastchild; END WHILE; END;
Per ulteriori informazioni circa l'utilizzo di ExceptionList, fare riferimento al flusso secondario nell'esempio Programma di gestione degli errori, che include l'ESQL che interroga la struttura ExceptionList e intraprende un'azione specifica in base al suo contenuto.