Esempi sulla gestione eccezioni standard, definizione e gestione di eccezioni custom
This commit is contained in:
31
ECCEZIONI_1.sql
Normal file
31
ECCEZIONI_1.sql
Normal 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
22
ECCEZIONI_2.sql
Normal 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
40
ECCEZIONI_3.sql
Normal 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
48
ECCEZIONI_4.sql
Normal 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
48
ECCEZIONI_5.sql
Normal 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
55
ECCEZIONI_6.sql
Normal 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;
|
||||
Reference in New Issue
Block a user