Documentazione di PostgreSQL 9.0 > Programmazione del server > PL/pgSQL - Linguaggio procedurale SQL > Errori e messaggi
PrecedenteCursoriProcedure TriggerSuccessivo

39.8. Errori e messaggi

Usare l'istruzione RAISE per riportare messaggi e sollevare errori.

RAISE [ level ] 'format' [, expression [, ... ]] [ USING option = expression [, ... ] ];
RAISE [ level ] condition_name [ USING option = expression [, ... ] ];
RAISE [ level ] SQLSTATE 'sqlstate' [ USING option = expression [, ... ] ];
RAISE [ level ] USING option = expression [, ... ];
RAISE ;

L'opzione level specifica la gravità dell'errore. I livelli permessi sono DEBUG, LOG, INFO, NOTICE, WARNING, e EXCEPTION, con EXCEPTION che è il predefinito. EXCEPTION solleva un errore (che normalmente annulla la transazione corrente); gli altri livelli generano solamente messaggi di diversi livelli di priorità. Il fatto che i messaggi di una particolare priorità siano riportati al client, scritti sul log del server, o entrambi è controllato dalle variabili di configurazione log_min_messages e client_min_messages. Si veda Capitolo 18, Configurazione del server per maggiori informazioni.

Dopo level, se presente, è possibile scrivere format (che deve essere una semplice stringa letterale, non un'espressione). La stringa format specifica il testo del messaggio si errore da segnalare. La stringa format può essere seguita da espressioni argomento opzionali da inserire nel messaggio. All'interno della stringa format, % viene sostituita dalla rappresentazione in stringa del valore opzionale seguente. Scrivere %% per emettere un % letterale.

In questo esempio, il valore di v_job_id sostituirà il % nella stringa:

RAISE NOTICE 'Calling cs_create_job(%)', v_job_id;

È possibile allegare informazioni aggiuntive al resoconto dell'errore scriverndo USING seguito da elementi option = expression. Le parole chiave option permesse sono MESSAGE, DETAIL, HINT, e ERRCODE, mentre ogni expression può essere qualsiasi espressione stringa. MESSAGE imposta il testo del masseggio di errore (questa opzione non può essere usata nella forma di RAISE che include una stringa format prima di USING). DETAIL fornisce un messaggio del dettaglio dell'errore, mentre HINT fornisce un messaggio di suggerimento. ERRCODE specifica il codice dell'errore da riportare (SQLSTATE), o dal nome della condizione come mostrato in Appendice A, Codici di errore di PostgreSQL, o direttamente come codice SQL di cinque caratteri.

Questo esempio annullerà la transazione con il dato messaggio di errore e suggerimento:

RAISE EXCEPTION 'Nonexistent ID --> %', user_id
      USING HINT = 'Please check your user id';

Questi due esempi mostrano modi equivalenti di impostare il SQLSTATE:

RAISE 'Duplicate user ID: %', user_id USING ERRCODE = 'unique_violation';
RAISE 'Duplicate user ID: %', user_id USING ERRCODE = '23505';

C'è una secondo tipo di sintassi per RAISE in cui l'argomento principale è il nome della condizione o SQLSTATE da riportare, per esempio:

RAISE division_by_zero;
RAISE SQLSTATE '22012';

In questa sintassi, USING può essere usato per indicare un messaggio d'errore, un dettaglio o un suggerimento personalizzato. Un altro modo di fare l'esempio precedente è

RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;

Un'ulteriore variante è di scrivere RAISE USING o RAISE level USING e mettere tutto il resto nell'elenco USING.

L'ultima variante di RAISE non ha parametri del tutto. Quasta forma può essere usata solo all'interno della clausola EXCEPTION di un blocco BEGIN; esso causa che l'errore correntemente gestito sia lanciato di nuovo.

[Nota]

Nota

Prima di PostgreSQL™ 9.1, RAISE senza parametri era interpretato come lanciare di nuovo l'errore dal blocco contenente il gestore di eccezioni attivo. Così una clausola EXCEPTION annidata all'interno di quel gestore potrebbe non catturarla, anche se il RAISE era all'interno del blocco della clausa EXCEPTION annidata. Questo fu considerato anche essere sorprendentemente incompatibile con PL/SQL di Oracle.

Se non è specificato nessun nome di condizione nè SQLSTATE in un comando RAISE EXCEPTION, come predefinito si usa RAISE_EXCEPTION (P0001). Se nessun messaggio di testo viene specificato, il comportamento predefinito è di usare il nome della condizione o SQLSTATE come messaggio di testo.

[Nota]

Nota

Quando si specifica un codice di errore con un SQLSTATE, non si è limitati a codici di errore predefiniti, ma si può selezionare qualsiasi codice di errore che consiste di cinque cifre e/o lettere ASCII maiuscole, diverse da 00000. Si raccomanda di evitare di lanciare codici di errore che finiscano con tre zeri, dato che questi sono codici di categorie e possono essere intercettati solo intercettando l'intera categoria.

Documentazione di PostgreSQL 9.0 > Programmazione del server > PL/pgSQL - Linguaggio procedurale SQL > Errori e messaggi
PrecedenteCursoriProcedure TriggerSuccessivo