Cattura dello stato del database

Se si verifica un errore durante l'accesso ad un database esterno, sono disponibili due opzioni:

La prima opzione è quella predefinita; l'elaborazione ESQL nel nodo corrente viene interrotta. L'eccezione viene propagata all'indietro nel flusso di messaggi fino a quando viene raggiunto un nodo catch di chiusura oppure il nodo di input per questo flusso di messaggi. Se l'eccezione raggiunge il nodo di input, tutte le transazioni vengono annullate.

La seconda opzione richiede la comprensione dei codici di ritorno del database e la serie logica di azioni da eseguire quando si verifica un errore. Per abilitare questa elaborazione dell'errore del database in linea, è necessario annullare la selezione della proprietà del nodo Filter, Database o Compute Genera eccezione in caso di errore database. Se si effettua questa operazione, il nodo imposta gli indicatori di stato del database SQLCODE, SQLSTATE, SQLNATIVEERROR e SQLERRORTEXT con le informazioni appropriate dal gestore del database invece di generare un'eccezione.

Gli indicatori contengono informazioni solo quando si verifica un errore (non un'avvertenza), a meno che non sia stata selezionata la proprietà Valuta le avvertenze come errori. Se le operazioni sul database vengono eseguite correttamente, gli indicatori contengono i relativi valori predefiniti che indicano l'esito positivo.

E' possibile utilizzare i valori contenuti in tali indicatori nelle istruzioni ESQL per determinare l'azione da eseguire. E' possibile accedere a tali indicatori con le funzioni SQLCODE, SQLSTATE, SQLNATIVEERROR e SQLERRORTEXT.

Se si sta provando l'elaborazione dell'errore in linea, è necessario verificare gli indicatori di stato dopo l'esecuzione di ciascuna istruzione del database per rilevare e correggere tutti gli errori. Durante l'elaborazione degli indicatori, se viene rilevato un errore che non può essere gestito in linea, è possibile generare una nuova eccezione per gestirlo in un nodo catch oppure lasciarlo nel nodo di input in modo che la transazione venga annullata. Per eseguire questa operazione, è possibile utilizzare l'istruzione ESQL THROW.

E' possibile verificare il caso in cui SELECT non restituisca dati. Questa situazione non è considerata un errore e SQLCODE non è impostato, per cui è necessario verificare la situazione in modo esplicito. Questo caso è descritto in Controllo delle restituzioni di SELECT.

Utilizzo di ESQL per accedere agli indicatori di stato del database

L'esempio ESQL riportato di seguito illustra come utilizzare le quattro funzioni di stato del database e come includere le informazioni di errore restituite in una eccezione:

DECLARE SQLState1 CHARACTER;   
DECLARE SQLErrorText1 CHARACTER;   
DECLARE SQLCode1 INTEGER;   
DECLARE SQLNativeError1 INTEGER;  
  
-- Make a database insert to a table that does not exist --
INSERT INTO Database.DB2ADMIN.NONEXISTENTTABLE (KEY,QMGR,QNAME) 
                              VALUES (45,'REG356','my TESTING 2');

--Retrieve the database return codes --
SET SQLState1 = SQLSTATE;
SET SQLCode1 = SQLCODE;
SET SQLErrorText1 = SQLERRORTEXT;
SET SQLNativeError1 = SQLNATIVEERROR;

--Use the THROW statement to back out the database and issue a user exception--
THROW USER EXCEPTION MESSAGE 2950 VALUES
( 'The SQL State' , SQLState1 , SQLCode1 , SQLNativeError1 , 
SQLErrorText1 );

Non è necessario generare un'eccezione quando si rileva un errore del database; è possibile salvare le informazioni di errore restituite nella struttura ad albero LocalEnvironment ed includere un nodo Filter nel flusso di messaggi che instrada il messaggio in flussi secondari di errore o di esito positivo in base ai valori salvati.

Il programma di esempio Airline Reservations sample fornisce un ulteriore esempio dell'utilizzo di tali funzioni del database da parte di ESQL.

Concetti correlati
Panoramica dei flussi di messaggi
Struttura ad albero ExceptionList
Panoramica di ESQL
Creazione di modelli di messaggio
Codifica ESQL per gestire gli errori
Attività correlate
Progettazione di un flusso di messaggi
Definizione del contenuto del flusso di messaggi
Gestione degli errori nei flussi di messaggi
Gestione dei file ESQL
Controllo delle restituzioni di SELECT
Riferimenti correlati
Nodo Compute
Nodo Database
Nodo Filter
Riferimento ESQL
Funzioni di stato del database ESQL
Istruzione DECLARE
Istruzione DECLARE HANDLER
Istruzione INSERT
Istruzione SET
Istruzione THROW
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05840_