Esempi sulla gestione eccezioni standard, definizione e gestione di eccezioni custom

This commit is contained in:
Fabio Scotto di Santolo
2019-09-12 20:38:05 +02:00
parent dbf7aa62ef
commit e3a67446dc
6 changed files with 244 additions and 0 deletions

31
ECCEZIONI_1.sql Normal file
View File

@@ -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;

22
ECCEZIONI_2.sql Normal file
View File

@@ -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;

40
ECCEZIONI_3.sql Normal file
View File

@@ -0,0 +1,40 @@
-- Esempio di scope delle eccezioni
<<BLOCCO_ESTERNO>>
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);
<<BLOCCO_INTERNO>>
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;

48
ECCEZIONI_4.sql Normal file
View File

@@ -0,0 +1,48 @@
-- Esempio di eccezioni definite dall'utente
<<BLOCCO_ESTERNO>>
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);
<<BLOCCO_INTERNO>>
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;

48
ECCEZIONI_5.sql Normal file
View File

@@ -0,0 +1,48 @@
-- Esempio eccezioni dinamiche definite dall'utente
<<BLOCCO_ESTERNO>>
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);
<<BLOCCO_INTERNO>>
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;

55
ECCEZIONI_6.sql Normal file
View File

@@ -0,0 +1,55 @@
-- Esempio eccezioni dinamiche definite dall'utente
<<BLOCCO_ESTERNO>>
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);
<<BLOCCO_INTERNO>>
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;