Funzione SQLSTATE

SQLSTATE è una funzione di stato del database che restituisce un tipo di dati CHARACTER composto da 5 caratteri con il valore predefinito '00000' (cinque zeri come una stringa).

SINTASSI

All'interno di un flusso di messaggi, è possibile accedere ed aggiornare una risorsa del database esterno utilizzando le funzioni del database ESQL disponibili nei nodi Filter, Database e Compute. Quando si effettuano le chiamate ad un database esterno, è possibile che vengano visualizzati degli errori, come tabella inesistente, database non disponibile oppure un inserimento per una chiave già esistente.

Quando si verificano tali errori, l'azione predefinita del broker è quella di generare un'eccezione. Tale funzionamento è determinato dal modo in cui è impostata la proprietà Genera eccezione in caso di errore database. Se si seleziona questa casella di spunta, il broker termina l'elaborazione del nodo, propaga il messaggio al terminale di errore del nodo e scrive i dettagli dell'errore in ExceptionList. Se si desidera ignorare il funzionamento predefinito e gestire un errore del database nel codice ESQL nel nodo, annullare la selezione della casella di spunta Genera eccezione in caso di errore database. Il broker non genera alcuna eccezione ed è necessario includere l'istruzione THROW per generare un'eccezione se un determinato codice di stato SQL non è previsto. Consultare Istruzione THROW per una descrizione di THROW.

Se si desidera gestire gli errori del database in un nodo, è possibile utilizzare la funzione di stato del database SQLSTATE per ricevere informazioni relative allo stato della chiamata DBMS eseguita in ESQL. E' possibile includerla in istruzioni condizionali nel codice ESQL del nodo corrente per riconoscere e gestire possibili errori.

Stati SQL

In ESQL, gli stati SQL sono stringhe di caratteri di lunghezza variabile. Per convenzione, tali stringhe contengono 6 caratteri compresi tra 0 e 9 ed A e Z. Di seguito è riportato il significato dei sei caratteri:
Carattere 1
Origine dell'eccezione
Caratteri 2 - 3
Classe dell'eccezione
Caratteri 4 - 6
Sottoclasse dell'eccezione

Lo stato SQL di un'eccezione è determinato da un processo in due fasi. Nella prima fase, le informazioni relative all'eccezione vengono esaminate e tutte le eccezioni secondarie (le informazioni che indicano l'operazione eseguita dal broker nel momento in cui si è verificata l'eccezione) vengono ignorate fino a quando viene individuata l'eccezione che descrive l'errore originario.

La seconda fase è riportata di seguito:
  1. Se l'eccezione selezionata è un'eccezione del database, lo stato SQL è quello fornito dal database preceduto dalla lettera "D" per evitare confusione con le eccezioni generate nel broker. Il codice SQL, l'errore nativo ed il testo dell'errore sono quelli forniti dal database.
  2. Se l'eccezione selezionata è un'eccezione dell'utente (generata in un'istruzione THROW), il codice SQL, lo stato, l'errore nativo ed il testo dell'errore vengono presi, nell'ordine, dai primi quattro inserimenti dell'eccezione. Il valore di stato risultante viene utilizzato così come viene fornito (non viene preceduto da alcuna lettera, come, ad esempio, "U"). In realtà, la lettera "U" non è utilizzata dal broker come un indicatore di origine. Se si intende definire uno stato SQL univoco piuttosto che imitare uno stato esistente, è consigliato l'utilizzo di stati SQL che iniziano con la lettera "U". Scegliere di seguire questa indicazione, la presenza della lettera "U" consente a un programma di gestione di associare tutte le eccezioni generate e definite dall'utente a un operatore LIKE’U%’.
  3. Se l'eccezione selezionata ha avuto origine nella trasmissione del messaggio o nell'implementazione ESQL, il codice SQL, lo stato, l'errore nativo ed il testo dell'errore sono quelli descritti nell'elenco riportato di seguito.
  4. Per tutte le altre eccezioni, lo stato SQL è '', che indica nessuna origine, nessuna classe e nessuna classe secondaria.

Alcune eccezioni che forniscono attualmente uno stato SQL vuoto potrebbero fornire stati singoli in rilasci futuri. Se si desidera catturare eccezioni non classificate, utilizzare il carattere wildcard "tutto" ("%") per lo stato SQL nell'ultimo programma di gestione di un ambito. Questo continuerà a catturare la stessa serie di eccezioni se alle eccezioni precedentemente non classificate vengono forniti nuovi stati SQL univoci.

Sono definiti i seguenti stati SQL:

Dddddd
ddddd è lo stato restituito dal database.
SqlState = ‘S22003'
Overflow aritmetico. Un'operazione il cui risultato è un tipo numerico risultato in un valore non compreso nell'intervallo supportato.
SqlState = ‘S22004’
Valore null non consentito. Era presente un valore null in un punto in cui non sono consentiti valori null.
SqlState = ‘S22007’
Formato data/ora non valido. Una stringa di caratteri utilizzata in un cast da tipo character a tipo date-time aveva il formato di base errato (ad esempio, '01947-10-24') oppure valori non compresi negli intervalli consentiti dal calendario Gregoriano (ad esempio, '1947-21-24').
SqlState = ‘S22008’
Overflow del campo della data e dell'ora. Un'operazione il cui risultato è un tipo date/time ha restituito un valore non compreso nell'intervallo supportato.
SqlState = ‘S22011’
Errore SUBSTRING. I parametri FROM e FOR, insieme alla lunghezza del primo operando, violano le regole della funzione SUBSTRING.
SqlState = ‘S22012’
Divisione per zero. Un'operazione di divisione il cui tipo di dati del risultato non ha il concetto di infinito aveva l'operando di destra uguale a zero.
SqlState = ‘S22015’
Overflow del campo dell'intervallo. Un'operazione il cui risultato è di tipo INTERVAL ha restituito un valore non compreso nell'intervallo supportato del tipo di dati INTERVAL.
SqlState = ‘S22018’
Valore character non valido per il cast.
SqlState = ‘SPS001’
Terminale di destinazione non valido. Un'istruzione PROPAGATE al terminale ha provato ad utilizzare un nome di terminale non valido.
SqlState = ‘SPS002’
Etichetta di destinazione non valida. Un'istruzione PROPAGATE all'etichetta ha provato ad utilizzare un'etichetta non valida.
SqlState = 'MQW001', SqlNativeError = 0
Il flusso di bit non soddisfa i requisiti per i messaggi MQ. Non è stato eseguito alcun tentativo di inserirlo in una coda. Questo problema non viene risolto in caso di nuovo tentativo e di gestione della coda.
SqlState = 'MQW002', SqlNativeError = 0
I nomi del gestore code o della coda di destinazione non erano validi (non possono essere convertiti da unicode alla code page del gestore code). Questo problema non viene risolto se si riprova e si svuota la coda.
SqlState = 'MQW003', SqlNativeError = 0
E' stata specificata la modalità di richiesta, ma i nomi del gestore code o della coda "di risposta" non erano validi (non è stato possibile eseguire la conversione da unicode alla code page del messaggio). Questo problema non viene risolto se si riprova e si svuota la coda.
SqlState = 'MQW004', SqlNativeError = 0
E' stata specificata la modalità di risposta ma i nomi del gestore code o della coda presi dal messaggio non erano validi (non possono essere convertiti dalla code page fornita ad unicode). Questo problema non viene risolto se si riprova e si svuota la coda.
SqlState = 'MQW005', SqlNativeError = 0
E' stata specificata la modalità dell'elenco di destinazione, ma l'elenco di destinazione fornito non soddisfa i requisiti di base per gli elenchi di destinazione. Non è stato eseguito alcun tentativo di inserire un messaggio in una coda. Questo problema non viene risolto in caso di nuovo tentativo e di gestione della coda.
SqlState = 'MQW101', SqlNativeError = come restituito da MQ
Impossibile aprire la coda o il gestore code di destinazione. La gestione della coda potrebbe consentire di risolvere questo problema, che non può essere risolto riprovando.
SqlState = 'MQW102', SqlNativeError = come restituito da MQ
Impossibile scrivere nella coda o nel gestore code di destinazione. Questo problema potrebbe essere risolto riprovando oppure mediante la gestione della coda.
SqlState = 'MQW201', SqlNativeError = numero di destinazioni con un errore
Si è verificato più di un errore durante l'elaborazione di un elenco di destinazione. Il messaggio può essere stato inserito in zero o più code. Questo problema potrebbe essere risolto riprovando oppure mediante la gestione della coda.
Elementi utilizzati dall'utente in un'istruzione THROW
Utilizzare Uuuuuuu per le eccezioni utente, a meno che non venga imitata una delle eccezioni sopra definite.
Stringa vuota
Tutti gli altri errori.
Concetti correlati
Panoramica dei flussi di messaggi
Panoramica di ESQL
Attività correlate
Definizione del contenuto del flusso di messaggi
Sviluppo di ESQL
Cattura dello stato del database
Riferimenti correlati
Funzione SQLCODE
Funzione SQLERRORTEXT
Funzione SQLNATIVEERROR
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak17990_