complete guide pl sql exception handling with examples
Questo tutorial spiega la gestione delle eccezioni PL SQL e concetti correlati come tipi di eccezioni, eccezioni definite dall'utente e dal sistema, come sollevare un'eccezione, ecc:
Nel Formato data / ora PL / SQL di Serie PL / SQL , abbiamo appreso alcune utili funzioni relative a Datetime, Timestamp e Interval
In questo articolo, discuteremo la gestione delle eccezioni in PL SQL. Inoltre, esploreremo i vantaggi delle eccezioni e come aumentarle.
Cominciamo con gli apprendimenti !!
Cosa imparerai:
Gestione delle eccezioni PL SQL
Un errore o un evento di avviso viene chiamato eccezione. Viene rilevato durante l'esecuzione del runtime del programma PL / SQL. PL / SQL ha meccanismi per gestire queste condizioni eccezionali con l'aiuto del blocco di codice EXCEPTION dove viene definito come contrastare la condizione di errore.
Esistono due tipi di eccezioni. Sono elencati di seguito:
- Eccezioni definite dall'utente.
- Eccezioni definite dal sistema.
Alcune delle comuni eccezioni definite dal sistema sono fuori dalla memoria e divisione per zero, con nomi come STORAGE_ERROR e ZERO_DIVIDE rispettivamente. Le eccezioni definite dall'utente vengono dichiarate in un pacchetto, sottoprogramma o nella sezione della dichiarazione del blocco di codice PL / SQL e devono essere assegnati nomi.
Quando si verifica un'eccezione, il flusso naturale di esecuzione viene interrotto, quindi l'esecuzione punta alla sezione delle eccezioni del codice PL / SQL. Mentre le eccezioni definite dal sistema vengono lanciate per impostazione predefinita, quelle definite dall'utente devono essere lanciate esplicitamente dalla parola chiave RAISE.
Pertanto, la gestione delle eccezioni aiuta a gestire gli errori che si verificano durante l'esecuzione in fase di esecuzione e non durante la compilazione del programma.
Vantaggi della gestione delle eccezioni
I vantaggi sono elencati di seguito:
- Se il nostro codice non ha una gestione delle eccezioni, ogni volta che eseguiamo un'istruzione, dobbiamo verificare gli errori durante l'esecuzione.
- Se evitiamo la gestione delle eccezioni nel nostro codice, gli errori effettivi vengono persi, il che dà origine ad altri errori.
- La gestione delle eccezioni consente di saltare più verifiche nel codice.
- Fornisce una migliore leggibilità del codice isolando i gestori di errori nel codice.
Sintassi per la gestione delle eccezioni:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
L'eccezione predefinita viene eseguita con QUANDO altri ALLORA.
Consideriamo una tabella che ha un nome CITTADINO .
SELECT * FROM CITIZEN;
Abbiamo creato la tabella CITIZEN con l'aiuto dell'istruzione SQL fornita di seguito.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Inserisci i valori in questa tabella con le istruzioni SQL fornite di seguito:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implementazione della codifica con gestione delle eccezioni:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
L'output del codice sopra:
Nel codice sopra, poiché non ci sono cittadini con età 9 nella tabella CITIZEN, viene sollevata un'eccezione di runtime.
Solleva eccezione in PL / SQL
Un'eccezione può essere sollevata dagli sviluppatori in modo esplicito con l'aiuto della parola chiave RAISE.
La sintassi per la generazione di eccezioni:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Qui l'eccezione_n è il nome dell'eccezione che stiamo sollevando. In questo modo, possiamo sollevare eccezioni sia definite dall'utente che definite dal sistema.
Eccezione definita dall'utente
Gli sviluppatori possono creare le proprie eccezioni e utilizzarle per la gestione degli errori. Possono essere creati nella parte di dichiarazione di un sottoprogramma e sono accessibili solo all'interno di quel sottoprogramma.
È possibile utilizzare un'eccezione creata a livello di pacchetto ogni volta che si accede al pacchetto. È possibile generare un'eccezione definita dall'utente utilizzando la parola chiave RAISE.
La sintassi per un errore definito dall'utente è:
DECLARE exception_n EXCEPTION;
Qui, il eccezione_n è il nome dell'eccezione che stiamo sollevando. Quindi possiamo dichiarare un'eccezione dando un nome seguito dalla parola chiave EXCEPTION. Un'eccezione può essere dichiarata in modo simile a come vengono dichiarate le variabili. Tuttavia, un'eccezione è una condizione imprevista e non un elemento di dati.
Ambito di eccezione in PL / SQL:
Le regole di ambito per l'eccezione PL / SQL sono elencate di seguito:
- Non è possibile dichiarare un'eccezione più di una volta nello stesso blocco di codice. Ma possiamo dichiarare la stessa eccezione in due diversi blocchi di codice.
- Un'eccezione dichiarata all'interno di un blocco di codice è locale all'interno di quel blocco e globale per ogni sottoblocco.
- Se dichiariamo di nuovo un'eccezione globale all'interno di un sottoblocco, la dichiarazione locale prevale.
Consideriamo ancora una tabella che si chiama CITIZEN.
Implementazione del codice con eccezioni definite dall'utente:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
L'output del codice sopra:
revisioni imparziali indipendenti del firewall a 64 bit gratuito
Eccezione predefinita
In violazione delle regole del database o oltre la soglia dipendente dal sistema, viene generata automaticamente un'eccezione interna. Tutti questi errori hanno un numero univoco e ogni eccezione è definita come un nome. Per esempio, PL / SQL genera un'eccezione predefinita NO_DATA_FOUND quando una query SELECT non recupera alcuna riga.
Tutte le eccezioni predefinite di PL / SQL sono dichiarate nel pacchetto STANDARD che si occupa dell'ambiente PL / SQL.
Eccezione | Errore Oracle | CODICE SQL | Descrizione |
---|---|---|---|
NUMERO NON VALIDO | ORA - 01722 | -1722 | Questa eccezione viene sollevata se la conversione in una stringa di caratteri in un numero non viene eseguita poiché la stringa rappresenta un numero non valido. |
ACCESS_INTO_NULL | ORA - 06530 | -6530 | Questa eccezione viene sollevata se a un oggetto nullo viene naturalmente assegnato un valore. |
CASE_NOT_FOUND | ORA - 06592 | -6592 | Questa eccezione viene sollevata se nessuna delle opzioni nella clausola WHEN viene scelta e non esiste una clausola ELSE. |
COLLECTION_IS_NULL | ORA - 06531 | -6531 | Questa eccezione viene sollevata quando il codice tenta di applicare metodi di raccolta tranne EXISTS a una tabella nidificata o varray che non è inizializzata. Può anche essere generato se il nostro codice tenta di assegnare valori a una tabella nidificata o varray che non è inizializzata. |
DUP_VAL_ON_INDEX | ORA - 00001 | -1 | Questa eccezione viene sollevata se si tenta di memorizzare valori duplicati in una colonna vincolata da un indice univoco. |
CURSOR_ALREADY_OPEN | ORA - 06511 | -6511 | Questa eccezione viene sollevata se il nostro codice tenta di aprire un cursore già aperto. |
INVALID_CURSOR | ORA - 01001 | -1001 | Questa eccezione viene sollevata se proviamo a eseguire alcune operazioni sui cursori che non sono consentite. Ad esempio, il tentativo di chiudere un cursore già chiuso. |
LOGIN_DENIED | ORA - 01017 | -1017 | Questa eccezione viene sollevata se il programma ha tentato di accedere al database con un nome utente e una password non corretti. |
NESSUN DATO TROVATO | ORA - 01403 | 100 | Questa eccezione viene sollevata se una query SELECT non recupera alcuna riga. |
NOT_LOGGED_ON | ORA - 01012 | -1012 | Questa eccezione viene sollevata se si tenta di eseguire un'operazione sul database senza connettersi ad esso. |
PROGRAM_ERROR | ORA - 06501 | -6501 | Questa eccezione viene sollevata se il programma PL / SQL ha riscontrato un errore interno. |
ROWTYPE_MISMATCH | ORA - 06504 | -6504 | Questa eccezione viene sollevata se un cursore tenta di restituire valori a una variabile con un tipo di dati incompatibile. |
SELF_IS_NULL | ORA - 30625 | -30625 | Questa eccezione viene sollevata se un metodo membro viene chiamato senza inizializzare il suo tipo di oggetto. |
STORAGE_ERROR | ORA - 06500 | -6500 | Questa eccezione viene sollevata se il programma PL / SQL ha esaurito la memoria o la sua memoria è stata danneggiata durante l'esecuzione. |
TOO_MANY_ROWS | ORA - 01422 | -1422 | Questa eccezione viene sollevata se una query SELECT recupera più righe. |
SUBSCRIPT_BEYOND_COUNT | ORA - 06533 | -6533 | Questa eccezione viene sollevata se un pedice è maggiore del conteggio totale del numero di elementi nella raccolta. |
SUBSCRIPT_OUTSIDE_LIMIT | ORA - 06532 | -6532 | Questa eccezione viene sollevata se un pedice è oltre l'intervallo di soglia. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Questa eccezione viene sollevata se la conversione in una stringa di caratteri in un ID riga universale non viene eseguita poiché la stringa di caratteri rappresenta un ID riga non valido. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Questa eccezione viene sollevata se Oracle è in attesa di una risorsa. |
VALUE_ERROR | ORA-06502 | -6502 | Questa eccezione viene sollevata se nel nostro programma si verifica un errore matematico, di conversione, di troncamento. |
ZERO_DIVIDE | ORA-01476 | -1476 | Questa eccezione viene sollevata se proviamo a dividere un numero per 0. |
Domande e risposte frequenti
D # 1) Cos'è un'eccezione predefinita in PL / SQL?
Risposta: Un'eccezione predefinita viene lanciata automaticamente da PL / SQL se c'è una violazione delle regole del database da parte di un programma.
D # 2) Cos'è la gestione delle eccezioni PL / SQL e perché è necessaria?
Risposta: Un errore o un evento imprevisto nel programma è chiamato eccezione. Interrompe il normale flusso di esecuzione del programma. In PL / SQL, l'eccezione viene gestita all'interno di un blocco EXCEPTION nel codice e l'azione corretta contro l'eccezione è descritta all'interno di quel blocco.
D # 3) Cosa si intende per gestione delle eccezioni?
Risposta: È il metodo per rispondere a eventi imprevisti che possono verificarsi durante l'esecuzione del codice.
D # 4) Quali sono le due forme di gestione degli errori?
Risposta: Le due forme di gestione degli errori includono errore in fase di compilazione e errore di tempo di esecuzione . L'errore di runtime si verifica durante l'esecuzione del programma a causa di dati o logica impropri. Gli errori in fase di compilazione vengono rilevati durante la compilazione del nostro codice.
Q # 5) Qual è la differenza tra errore ed eccezione?
Risposta: Le eccezioni sono incidenti che vengono gestiti con l'aiuto del blocco try / catch e possono essere riscontrati sia in fase di compilazione che in fase di esecuzione dell'esecuzione del programma. Gli errori, invece, vengono rilevati solo in fase di esecuzione.
Conclusione
In questo tutorial, abbiamo discusso in dettaglio alcuni concetti di base di PL / SQL che sono essenziali per la gestione delle eccezioni nei nostri programmi.
Abbiamo trattato i seguenti argomenti elencati di seguito:
- Eccezioni.
- Tipi di eccezioni.
- Alcune eccezioni predefinite.
Nel prossimo tutorial, discuteremo le transazioni PL / SQL, i concetti OOPS e molti altri argomenti collegati.
Lettura consigliata
- Esercitazione sulla gestione delle eccezioni C # con esempi di codice
- Eccezioni Java e gestione delle eccezioni con esempi
- Pacchetto PL SQL: Tutorial pacchetto Oracle PL / SQL con esempi
- Gestione delle eccezioni in C ++
- Tutorial PL SQL per principianti con esempi | Cos'è PL / SQL
- Esercitazione sui record PL SQL con esempi