Scopri come gestire le eccezioni in PL / SQL



Questo articolo è una guida completa su come eseguire la gestione delle eccezioni in PL / SQL discutendo i vari tipi di eccezioni offerti in PL / SQL.

Se sei un programmatore, potresti avere familiarità con il concetto di gestione delle eccezioni è parte integrante di qualsiasi . Poiché gli errori sono inevitabili e anche i più intelligenti di noi possono commettere errori durante la scrittura del codice, dobbiamo conoscere come gestirli. In questo articolo impareremo in particolare la gestione delle eccezioni in PL / SQL.

Gestione delle eccezioni SQL in PL / SQL-EdurekaDi seguito sono riportati gli argomenti trattati in questo articolo:





Cos'è un'eccezione?

Qualsiasi condizione o evento anormale che interrompe il normale flusso delle istruzioni del nostro programma in fase di esecuzione o in parole semplici un'eccezione è un errore.

Sintassi della gestione delle eccezioni in PL / SQL

DICHIARARE BEGIN EXCEPTION WHEN eccezione1 THEN eccezione1-istruzioni-gestione WHEN eccezione2 THEN eccezione2-istruzioni-gestione WHEN eccezione3 THEN eccezione3-istruzioni-gestione ........ WHEN altri THEN eccezione3-istruzioni-gestione END

Qui possiamo elencare tutte le eccezioni che vogliamo gestire. L'eccezione predefinita verrà gestita utilizzando 'WHEN others THEN'



Esempio di gestione delle eccezioni in PL / SQL

Il programma seguente mostra il nome e l'indirizzo di uno studente il cui ID è stato fornito. Poiché non c'è nessuno studente con valore ID 8 nel nostro database, il programma solleva l'eccezione di runtime NO_DATA_FOUND, che viene catturata nel blocco EXCEPTION.

php mysql_fetch_
DECLARE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type BEGIN SELECT nome, loation INTO s_name, s_loc FROM students WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Location:' || s_loc) ECCEZIONE QUANDO no_data_found THEN dbms_output.put_line ('No such student!') WHEN others THEN dbms_output.put_line ('Oops, Error!') END

Produzione

Nessuno di questi studenti! Procedura PL / SQL completata con successo.

Qui possiamo elencare tutte le eccezioni che vogliamo gestire. L'eccezione predefinita verrà gestita utilizzando ' QUANDO altri ALLORA '

Tipi di eccezioni in PL / SQL

  • Sistema definito
  • L'utente ha sfidato

Avanti in questo articolo sulla gestione delle eccezioni in PL / SQL , discutiamo in dettaglio di entrambi questi tipi.



Sistema definito

Definite e mantenute implicitamente dal server Oracle, queste eccezioni sono definite principalmente nel pacchetto standard Oracle. Ogni volta che si verifica un'eccezione all'interno del programma, il server Oracle corrisponde e identifica l'eccezione appropriata dal set di eccezioni disponibile nel pacchetto standard Oracle. Fondamentalmente, queste eccezioni sono predefinite in PL / SQL che viene sollevato QUANDO viene violata una particolare regola del database .

Il Eccezioni definite dal sistema sono ulteriormente suddivisi in due categorie:

  • Eccezioni di sistema denominate
  • Eccezioni di sistema senza nome

Eccezioni di sistema denominate

Le eccezioni PL / SQL denominate sono denominato nel pacchetto standard di PL / SQL , quindi lo sviluppatore non ha bisogno di definire le eccezioni PL / SQL nel proprio codice. PL / SQL fornisce molte eccezioni con nome predefinite, che vengono eseguite quando una regola del database viene violata da un programma. La tabella seguente elenca alcune delle importanti eccezioni predefinite e meno

Eccezione Errore Oracle SQLCODE Descrizione
ACCESS_INTO_NULL06530-6530Viene generato quando a un oggetto nullo viene assegnato automaticamente un valore.
CASE_NOT_FOUND06592-6592Viene generato quando nessuna delle scelte nella clausola WHEN di a Dichiarazione CASE è selezionato e non è presente alcuna clausola ELSE.
COLLECTION_IS_NULL06531-6531Viene generato quando un programma tenta di applicare metodi di raccolta diversi da EXISTS a una tabella nidificata o varray non inizializzata, oppure il programma tenta di assegnare valori agli elementi di una tabella nidificata o varray non inizializzata.
DUP_VAL_ON_INDEX00001-unoViene generato quando si tenta di memorizzare valori duplicati in una colonna con un indice univoco.
INVALID_CURSOR01001-1001Viene generato quando si tenta di eseguire un'operazione del cursore non consentita, come la chiusura di un cursore non aperto.
NUMERO NON VALIDO01722-1722Viene generato quando la conversione di una stringa di caratteri in un numero fallisce perché la stringa non rappresenta un numero valido.
LOGIN_DENIED01017-1017Viene generato quando un programma tenta di accedere al database con un nome utente o una password non validi.
NESSUN DATO TROVATO01403+100Viene generato quando un'istruzione SELECT INTO non restituisce righe.
NOT_LOGGED_ON01012-1012Viene generato quando viene eseguita una chiamata al database senza essere connesso al database.
PROGRAM_ERROR06501-6501Viene generato quando PL / SQL ha un problema interno.
ROWTYPE_MISMATCH06504-6504Viene generato quando un cursore recupera il valore in una variabile con un tipo di dati incompatibile.
SELF_IS_NULL30625-30625Viene generato quando viene richiamato un metodo membro, ma l'istanza del tipo di oggetto non è stata inizializzata.
STORAGE_ERROR06500-6500Viene generato quando PL / SQL ha esaurito la memoria o la memoria è stata danneggiata.
TOO_MANY_ROWS01422-1422Viene generato quando un'istruzione SELECT INTO restituisce più di una riga.
VALUE_ERROR06502-6502Viene generato quando si verifica un errore aritmetico, di conversione, di troncamento o di vincolo di dimensione.
ZERO_DIVIDE014761476Viene generato quando si tenta di dividere un numero per zero.

Esempio

PROCEDURA DI CREAZIONE O SOSTITUZIONE add_new_student (studente _id_in IN NUMBER, studente _name_in IN VARCHAR2) IS BEGIN INSERT INTO student (student _id, student _name) VALUES (student _id_in, student _name_in) ECCEZIONE QUANDO DUP_VAL_ON_INDEX THEN raise_application_ ) WHEN OTHERS THEN raise_application_error (-20002, 'Si è verificato un errore.') END

Andando avanti in questo articolo sulla gestione delle eccezioni in PL / SQL, cerchiamo di capire quali sono le eccezioni di sistema senza nome.

Eccezioni di sistema senza nome

Le eccezioni di sistema per le quali Oracle non ha un nome sono note come eccezioni di sistema senza nome. Queste eccezioni non si verificano frequentemente e vengono scritte con un codice e un messaggio associato.

Esistono fondamentalmente due modi per gestire le eccezioni di sistema senza nome:

1. Utilizzo del gestore di eccezioni WHEN OTHERS

2. Associare il codice di eccezione a un nome e utilizzarlo come eccezione denominata.

Alcuni passaggi seguiti per le eccezioni di sistema senza nome sono:

  • Sollevalo implicitamente.
  • Nel caso in cui non vengano gestiti in 'QUANDO Altri', devono essere gestiti esplicitamente.
  • Per gestire l'eccezione in modo esplicito, possono essere dichiarati utilizzando Pragma EXCEPTION_INIT e gestiti facendo riferimento al nome dell'eccezione definito dall'utente nella sezione dell'eccezione.

Un esempio di gestione delle eccezioni senza nome utilizzando Pragma EXCEPTION_INIT è fornito più avanti nell'articolo. Andando avanti in questo articolo sulla gestione delle eccezioni in PL / SQL, comprendiamo le eccezioni definite dall'utente.

Definito dall'utente

Come tutti gli altri linguaggi di programmazione, Oracle ti consente anche di dichiarare e implementare le tue eccezioni. A differenza delle eccezioni definite dal sistema, queste eccezioni vengono sollevate esplicitamente nel blocco PL / SQL.

Passaggi per dichiarare le eccezioni definite dall'utente nel database Oracle

Possiamo definire eccezioni definite dall'utente nel database Oracle nei seguenti 3 modi:

  • Utilizzo di una variabile di tipo EXCEPTION

Qui, possiamo dichiarare un'eccezione definita dall'utente dichiarando una variabile di EXCEPTION tipo di dati nel nostro codice e sollevarlo esplicitamente nel nostro programma usando l'istruzione RAISE.

  • Utilizzo della funzione PRAGMA EXCEPTION_INIT

Possiamo definire un numero di errore non predefinito con la variabile del tipo di dati EXCEPTION

  • Utilizzo del metodo RAISE_APPLICATION_ERROR

Utilizzando questo metodo, possiamo dichiarare un'eccezione definita dall'utente con il nostro numero e messaggio di errore personalizzati.

Fino ad ora potresti avere un'idea approssimativa dei modi in cui possiamo sollevare eccezioni definite dall'utente in PL / SQL. Impareremo a conoscere ciascuno dei metodi sopra menzionati con esempi più avanti in questo articolo sulla gestione delle eccezioni in PL / SQL.

Successivamente in questo articolo, procediamo con le dimostrazioni della gestione delle eccezioni definita dall'utente.

Dimostrazione delle eccezioni definite dall'utente

Andando avanti in questo articolo sulla gestione delle eccezioni in PL / SQL, vediamo di capire come utilizzare la variabile di tipo EXCEPTION.

Utilizzo di una variabile di tipo EXCEPTION

Il processo di dichiarazione dell'eccezione definita dall'utente è diviso in tre parti e queste 3 parti sono:

  • Dichiarare un tipo di dati di eccezione variabile
  • Solleva l'eccezione
  • Gestisci l'eccezione

Scriviamo un codice per dimostrare in dettaglio i passaggi precedenti.

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Nel blocco di dichiarazione sopra, abbiamo quattro variabili, tra cui le prime tre sono variabili del tipo di dato numerico normale e la quarta che è ex_DivZero è la variabile del tipo di dato dell'eccezione speciale. La quarta è la nostra eccezione definita dall'utente.

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

La parte di esecuzione sopra di questo blocco anonimo, entrerà in azione solo quando il divisore è 0. Se il divisore è zero come nel nostro caso, l'errore verrà sollevato e il controllo del programma salterà tutti i passaggi successivi e cercherà il gestore di eccezioni corrispondente. Nel caso in cui ne trovi un altro, eseguirà l'azione di conseguenza, altrimenti terminerà il programma o ci invierà un errore definito dal sistema non gestito.

EXCEPTION WHEN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE ('ERRORE, il divisore non può essere zero')

Questo è il gestore delle eccezioni. Non appena l'utente immette divisore come 0, verrà richiesta la stringa del messaggio precedente.

Codice finale:

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN IF var_divisor = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE_INTERVENTO var_Divisor = ' = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Andando avanti in questo articolo sulla gestione delle eccezioni in PL / SQL, vediamo di capire come utilizzare il metodo PRAGMA_EXCEPTION_INIT.

Utilizzo della funzione PRAGMA EXCEPTION_INIT

Nel PRAGMA EXCEPTION_INIT, un nome di eccezione è associato a un numero di errore Oracle. Questo nome può essere utilizzato nella progettazione del gestore delle eccezioni per l'errore.Per progetti enormi con molti errori definiti dall'utente, PRAGMA EXCEPTION_INIT è il metodo più utile e adatto.

Sintassi:

PRAGMA EXCEPTION_INIT (nome_eccezione, -Oracle_error_number)

Esempio

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Alcune operazioni che causano un errore ORA-00060 EXCEPTION WHEN deadlock_detected THEN NULL - gestisci l'errore END

PRAGMA EXCEPTION_INIT indica al compilatore di associare un nome di eccezione a un numero di errore Oracle come menzionato in precedenza. Ti consente di fare riferimento a qualsiasi eccezione interna per nome e di scrivere un gestore specifico per essa. Quando vedi uno stack di errori o una sequenza di messaggi di errore, quello in alto è quello che può essere intercettato e gestito.

come impostare il percorso in java

Andando avanti in questo articolo sulla gestione delle eccezioni in PL / SQL, vediamo di capire come utilizzare il metodo RAISE_APPLICATION_ERROR.

Utilizzo del metodo RAISE_APPLICATION_ERROR

È una procedura integrata nel software Oracle. Utilizzando questa procedura possiamo associare un numero di errore a un messaggio di errore personalizzato. Combinando sia il numero di errore che il messaggio di errore personalizzato, è possibile comporre una stringa di errore simile a quelle stringhe di errore predefinite che vengono visualizzate da Oracle quando si verifica un errore. La procedura RAISE_APPLICATION_ERROR si trova all'interno del pacchetto DBMS_STANDARD

Sintassi

raise_application_error (numero_errore, messaggio [, TRUE])

Esempio

/ * Viene creato un trigger trg_emp_detail_chk. * / CREATE OR REPLACE TRIGGER trg_emp_detail_chk / * La tempistica del trigger è dichiarata PRIMA DELL'AGGIORNAMENTO nella tabella EMPLOYEES. * / Prima dell'AGGIORNAMENTO sui dipendenti DECLARE permission_denied ECCEZIONE il giorno dell'ora di sistema è sabato o domenica oppure no. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN raise_application_error (-20000, 'Non sei autorizzato a fare qualsiasi modifica nei fine settimana !! ') / * La procedura raise_application_error viene chiamata con il valore del primo parametro come -20000 e il secondo parametro con un testo predefinito che indica che l'utente non è autorizzato a fare alcuna modifica nei fine settimana. * / END IF END

Con questo arriviamo alla fine di questo articolo sulla 'Gestione delle eccezioni in PL / SQL'. Spero che questo argomento sia compreso bene e ti abbia aiutato. Prova a scrivere i tuoi codici e incorporare i metodi spiegati in questo articolo.

Se vuoi essere formato da professionisti su questa tecnologia, puoi optare per una formazione strutturata da edureka! Controlla questo da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Questo corso ti insegna i concetti fondamentali e gli strumenti e le tecniche avanzati per gestire i dati e amministrare il database MySQL. Include l'apprendimento pratico su concetti come MySQL Workbench, MySQL Server, Data Modeling, MySQL Connector, Database Design, MySQL Command line, MySQL Functions, ecc. Alla fine della formazione sarai in grado di creare e amministrare il tuo database MySQL e gestirlo dati.

Hai domande per noi? Si prega di menzionarlo nella sezione commenti di questo articolo 'Gestione delle eccezioni in PL / SQL' e vi risponderemo il prima possibile.