From e3a67446dc35dd57657e6ac0c0aff256389c705e Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Thu, 12 Sep 2019 20:38:05 +0200 Subject: [PATCH] Esempi sulla gestione eccezioni standard, definizione e gestione di eccezioni custom --- ECCEZIONI_1.sql | 31 ++++++++++++++++++++++++++++ ECCEZIONI_2.sql | 22 ++++++++++++++++++++ ECCEZIONI_3.sql | 40 +++++++++++++++++++++++++++++++++++ ECCEZIONI_4.sql | 48 ++++++++++++++++++++++++++++++++++++++++++ ECCEZIONI_5.sql | 48 ++++++++++++++++++++++++++++++++++++++++++ ECCEZIONI_6.sql | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 244 insertions(+) create mode 100644 ECCEZIONI_1.sql create mode 100644 ECCEZIONI_2.sql create mode 100644 ECCEZIONI_3.sql create mode 100644 ECCEZIONI_4.sql create mode 100644 ECCEZIONI_5.sql create mode 100644 ECCEZIONI_6.sql diff --git a/ECCEZIONI_1.sql b/ECCEZIONI_1.sql new file mode 100644 index 0000000..38f46a1 --- /dev/null +++ b/ECCEZIONI_1.sql @@ -0,0 +1,31 @@ +DECLARE + V_CODFID VARCHAR2(20) := :CODFID; + V_NUMSPESE BINARY_INTEGER := 0; + V_VALORETOT NUMBER := 0; + V_VALMEDIO NUMBER; +BEGIN + + SELECT + SUM(TOTALE) + INTO + V_VALORETOT + FROM + CORSOPLSQL.SCONTRINI + WHERE + CODFID = V_CODFID; + + SELECT + COUNT(*) + INTO + V_NUMSPESE + FROM + CORSOPLSQL.SCONTRINI + WHERE + CODFID = V_CODFID; + + V_VALMEDIO := NVL(V_VALORETOT / V_NUMSPESE, 0); + DBMS_OUTPUT.PUT_LINE('Valore Medio della Spesa: ' || V_VALMEDIO); +EXCEPTION + WHEN ZERO_DIVIDE THEN + DBMS_OUTPUT.PUT_LINE('ERRORE: Il Numero delle spese DEVE essere maggiore di 0'); +END; diff --git a/ECCEZIONI_2.sql b/ECCEZIONI_2.sql new file mode 100644 index 0000000..1ac1ab0 --- /dev/null +++ b/ECCEZIONI_2.sql @@ -0,0 +1,22 @@ +DECLARE + V_CODICEFID CORSOPLSQL.CLIENTI.CODFIDELITY%TYPE := :CODFID; + V_NOMINATIVO VARCHAR2(100); +BEGIN + + SELECT + NOME || ' ' || COGNOME + INTO + V_NOMINATIVO + FROM + CORSOPLSQL.CLIENTI + WHERE + CODFIDELITY = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Nome del Cliente è ' || V_NOMINATIVO); + +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.PUT_LINE('NON è stato trovato alcun cliente!!!'); + WHEN VALUE_ERROR THEN + DBMS_OUTPUT.PUT_LINE('Nominativo Troppo Lungo'); +END; diff --git a/ECCEZIONI_3.sql b/ECCEZIONI_3.sql new file mode 100644 index 0000000..97f3ebc --- /dev/null +++ b/ECCEZIONI_3.sql @@ -0,0 +1,40 @@ +-- Esempio di scope delle eccezioni +<> +DECLARE + V_CODICEFID CORSOPLSQL.CLIENTI.CODFIDELITY%TYPE := :CODFID; + V_QTABOLLINI NUMBER := 0; + V_NOMINATIVO VARCHAR2(50); +BEGIN + + SELECT + NOME || ' ' || COGNOME + INTO + V_NOMINATIVO + FROM + CORSOPLSQL.CLIENTI + WHERE + CODFIDELITY = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Nome del Cliente è ' || V_NOMINATIVO); + + <> + BEGIN + SELECT + SUM(BOLLINI) + INTO + V_QTABOLLINI + FROM + SCONTRINI + WHERE + CODFID = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Cliente ha un monte bollini di ' || NVL(V_QTABOLLINI, 0)); + EXCEPTION + WHEN VALUE_ERROR OR ZERO_DIVIDE THEN + DBMS_OUTPUT.PUT_LINE('Errore nel calcolo del monte bollini'); + END; + +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.PUT_LINE('NON è stato trovato alcun cliente!!!'); +END; diff --git a/ECCEZIONI_4.sql b/ECCEZIONI_4.sql new file mode 100644 index 0000000..cf0a614 --- /dev/null +++ b/ECCEZIONI_4.sql @@ -0,0 +1,48 @@ +-- Esempio di eccezioni definite dall'utente +<> +DECLARE + V_CODICEFID CLIENTI.CODFIDELITY%TYPE := :CODFID; + V_QTABOLLINI NUMBER := 0; + V_NOMINATIVO VARCHAR2(50); + E_IDINVALIDO EXCEPTION; +BEGIN + + IF V_CODICEFID < 67000000 THEN + RAISE E_IDINVALIDO; + END IF; + + SELECT + NOME || ' ' || COGNOME + INTO + V_NOMINATIVO + FROM + CORSOPLSQL.CLIENTI + WHERE + CODFIDELITY = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Nome del Cliente è ' || V_NOMINATIVO); + + <> + BEGIN + SELECT + SUM(BOLLINI) + INTO + V_QTABOLLINI + FROM + SCONTRINI + WHERE + CODFID = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Cliente ha un monte bollini di ' || NVL(V_QTABOLLINI, 0)); + EXCEPTION + WHEN VALUE_ERROR OR INVALID_NUMBER THEN + DBMS_OUTPUT.PUT_LINE('Errore nel calcolo del monte bollini'); + END; + +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.PUT_LINE('NON è stato trovato alcun cliente!!!'); + WHEN E_IDINVALIDO THEN + DBMS_OUTPUT.PUT_LINE('Il codice fidelity deve essere > 67000000'); +END; + diff --git a/ECCEZIONI_5.sql b/ECCEZIONI_5.sql new file mode 100644 index 0000000..512684a --- /dev/null +++ b/ECCEZIONI_5.sql @@ -0,0 +1,48 @@ +-- Esempio eccezioni dinamiche definite dall'utente +<> +DECLARE + V_CODICEFID CLIENTI.CODFIDELITY%TYPE := :CODFID; + V_QTABOLLINI NUMBER := 0; + V_NOMINATIVO VARCHAR2(50); +BEGIN + + IF V_CODICEFID < 67000000 THEN + -- Valore compreso fra -20000 e -20999 + RAISE_APPLICATION_ERROR(-20001, 'Il Codice Fidelity deve essere > di 67000000'); + END IF; + + SELECT + NOME || ' ' || COGNOME + INTO + V_NOMINATIVO + FROM + CORSOPLSQL.CLIENTI + WHERE + CODFIDELITY = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Nome del Cliente è ' || V_NOMINATIVO); + + <> + BEGIN + IF V_CODICEFID = 67000031 THEN + RAISE_APPLICATION_ERROR(-20002, 'Non è possibile visualizzare i dati del codice 67000031'); + END IF; + + SELECT + SUM(BOLLINI) + INTO + V_QTABOLLINI + FROM + SCONTRINI + WHERE + CODFID = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Cliente ha un monte bollini di ' || NVL(V_QTABOLLINI, 0)); + END; + +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.PUT_LINE('NON è stato trovato alcun cliente!!!'); + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(SQLERRM); +END; diff --git a/ECCEZIONI_6.sql b/ECCEZIONI_6.sql new file mode 100644 index 0000000..4bf5f48 --- /dev/null +++ b/ECCEZIONI_6.sql @@ -0,0 +1,55 @@ +-- Esempio eccezioni dinamiche definite dall'utente +<> +DECLARE + V_CODICEFID CLIENTI.CODFIDELITY%TYPE := :CODFID; + V_QTABOLLINI NUMBER := 0; + V_NOMINATIVO VARCHAR2(50); + E_IDINVALIDO EXCEPTION; + PRAGMA EXCEPTION_INIT(E_IDINVALIDO, -20001); +BEGIN + + IF V_CODICEFID < 67000000 THEN + -- Valore compreso fra -20000 e -20999 + RAISE_APPLICATION_ERROR(-20001, 'Il Codice Fidelity deve essere > di 67000000'); + END IF; + + SELECT + NOME || ' ' || COGNOME + INTO + V_NOMINATIVO + FROM + CORSOPLSQL.CLIENTI + WHERE + CODFIDELITY = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Nome del Cliente è ' || V_NOMINATIVO); + + <> + BEGIN + IF V_CODICEFID = 67000031 THEN + RAISE_APPLICATION_ERROR(-20002, 'Non è possibile visualizzare i dati del codice 67000031'); + END IF; + + SELECT + SUM(BOLLINI) + INTO + V_QTABOLLINI + FROM + SCONTRINI + WHERE + CODFID = V_CODICEFID; + + DBMS_OUTPUT.PUT_LINE('Il Cliente ha un monte bollini di ' || NVL(V_QTABOLLINI, 0)); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(SQLERRM); + DBMS_OUTPUT.PUT_LINE(SQLCODE); + END; + +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.PUT_LINE('NON è stato trovato alcun cliente!!!'); + WHEN E_IDINVALIDO THEN + DBMS_OUTPUT.PUT_LINE(SQLERRM); + DBMS_OUTPUT.PUT_LINE(SQLCODE); +END;