Condividi tramite


SQLSTATEs

SQLSTATEs fornisce informazioni dettagliate sulla causa di un avviso o di un errore. SqlSTATEs in questo manuale sono basati su quelli presenti nella specifica dell'interfaccia della riga di comando ISO/IEF, anche se gli SQLSTATEs che iniziano con IM sono specifici di ODBC.

A differenza dei codici restituiti, le statistiche SQL in questo manuale sono linee guida e i driver non sono necessari per restituirli. Pertanto, mentre i driver devono restituire l'SQLSTATE appropriato per qualsiasi errore o avviso che sono in grado di rilevare, le applicazioni non dovrebbero fare affidamento su questo avvenimento in ogni caso. I motivi di questa situazione sono due:

  • Incompletezza Anche se questo manuale elenca un numero elevato di errori e avvisi e possibili cause per tali errori e avvisi, non è completo e probabilmente non sarà mai; Le implementazioni dei driver variano semplicemente troppo. Qualsiasi driver specificato probabilmente non restituirà tutti gli SQLSTATEs elencati in questo manuale e potrebbe restituire SQLSTATEs non elencati in questo manuale.

  • Complessità Alcuni motori di database, in particolare i motori di database relazionali, restituiscono letteralmente migliaia di errori e avvisi. È improbabile che i driver per tali motori eseguano il mapping di tutti questi errori e avvisi a SQLSTATEs a causa dell'impegno richiesto, dell'inescienza dei mapping, delle dimensioni elevate del codice risultante e del valore basso del codice risultante, che spesso restituisce errori di programmazione che non devono mai essere rilevati in fase di esecuzione. Pertanto, i driver devono eseguire il mapping di tanti errori e avvisi quanti sembrano ragionevoli e assicurarsi di eseguire il mapping di quegli errori e avvisi su cui si potrebbe basare la logica dell'applicazione, ad esempio SQLSTATE 01004 (dati troncati).

Poiché SQLSTATEs non vengono restituiti in modo affidabile, la maggior parte delle applicazioni li visualizza solo all'utente insieme al messaggio di diagnostica associato, che viene spesso adattato all'errore o all'avviso specifico che si è verificato e al codice di errore nativo. Raramente si verifica una perdita di funzionalità in questo modo, perché le applicazioni non possono basare la logica di programmazione sulla maggior parte degli STATI SQL in ogni caso. Si supponga, ad esempio, che SQLExecDirect restituisca SQLSTATE 42000 (errore di sintassi o violazione di accesso). Se l'istruzione SQL che ha causato questo errore è hardcoded o compilata dall'applicazione, si tratta di un errore di programmazione e il codice deve essere corretto. Se l'istruzione SQL viene immessa dall'utente, si tratta di un errore utente e l'applicazione ha eseguito tutto ciò che è possibile informando l'utente del problema.

Quando le applicazioni eseguono la logica di programmazione di base in SQLSTATEs, devono essere preparate affinché SQLSTATE non venga restituito o che venga restituito un SQLSTATE diverso. Esattamente quali SQLSTATEs vengano restituiti in modo affidabile può essere determinato solo sull'esperienza con numerosi driver. Tuttavia, una linea guida generale è che gli SQLSTATE per gli errori che si verificano dal driver o dal Gestore Driver, anziché dalla fonte dati, è più probabile che siano restituiti in modo affidabile. Ad esempio, la maggior parte dei driver probabilmente restituisce SQLSTATE HYC00 (funzionalità facoltativa non implementata), mentre un numero inferiore di driver probabilmente restituisce SQLSTATE 42021 (colonna già esistente).

Gli SQLSTATEs seguenti indicano errori o avvisi in fase di esecuzione e sono candidati validi per la logica di programmazione di base. Tuttavia, non esiste alcuna garanzia che tutti i driver li restituiscono.

  • 01004 (dati troncati)

  • 01S02 (valore opzione modificato)

  • HY008 (operazione annullata)

  • HYC00 (funzionalità facoltativa non implementata)

  • HYT00 (Timeout scaduto)

SQLSTATE HYC00 (funzionalità facoltativa non implementata) è particolarmente importante perché è l'unico modo in cui un'applicazione può determinare se un driver supporta un'istruzione o un attributo di connessione specifico.

Per un elenco completo di SQLSTATEs e delle funzioni restituite, vedere Appendice A: Codici di errore ODBC. Per una spiegazione dettagliata delle condizioni in cui ogni funzione potrebbe restituire un determinato SQLSTATE, vedere tale funzione.