From dbf7aa62ef197caf8dcdf3d56bddae7a055a68f5 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Wed, 11 Sep 2019 22:52:25 +0200 Subject: [PATCH] Statement di controllo e di iterazione --- CASE-WHEN.sql | 28 ++++++++++++++++++++++++++++ CICLI-ANNIDATI.sql | 36 ++++++++++++++++++++++++++++++++++++ FOR.sql | 37 +++++++++++++++++++++++++++++++++++++ IF-ELSE.sql | 14 ++++++++++++++ LOOP.sql | 28 ++++++++++++++++++++++++++++ SEARCHED CASE.sql | 28 ++++++++++++++++++++++++++++ WHILE.sql | 32 ++++++++++++++++++++++++++++++++ 7 files changed, 203 insertions(+) create mode 100644 CASE-WHEN.sql create mode 100644 CICLI-ANNIDATI.sql create mode 100644 FOR.sql create mode 100644 IF-ELSE.sql create mode 100644 LOOP.sql create mode 100644 SEARCHED CASE.sql create mode 100644 WHILE.sql diff --git a/CASE-WHEN.sql b/CASE-WHEN.sql new file mode 100644 index 0000000..2376e68 --- /dev/null +++ b/CASE-WHEN.sql @@ -0,0 +1,28 @@ +DECLARE + V_CODFIDELITY VARCHAR2(20) := :CODFID; + V_RESIDENZA VARCHAR2(30); +BEGIN + + SELECT + TRIM(PROV) + INTO + V_RESIDENZA + FROM + CORSOPLSQL.CLIENTI + WHERE + CODFIDELITY = V_CODFIDELITY; + + DBMS_OUTPUT.PUT_LINE('Provincia: ' || V_RESIDENZA); + + -- Espressioni case + CASE V_RESIDENZA + WHEN 'OR' THEN + DBMS_OUTPUT.PUT_LINE('Centro Sardegna'); + WHEN 'SS' THEN + DBMS_OUTPUT.PUT_LINE('Nord Sardegna'); + WHEN 'CA' THEN + DBMS_OUTPUT.PUT_LINE('Sud Sardegna'); + ELSE + DBMS_OUTPUT.PUT_LINE('Non in Sardegna'); + END CASE; +END; diff --git a/CICLI-ANNIDATI.sql b/CICLI-ANNIDATI.sql new file mode 100644 index 0000000..9dd520e --- /dev/null +++ b/CICLI-ANNIDATI.sql @@ -0,0 +1,36 @@ +DECLARE + V_CODFID VARCHAR2(20) := :CODFID; + V_NUMSPESE BINARY_INTEGER := 0; + V_CONTATORE1 BINARY_INTEGER := 0; + V_CONTATORE2 BINARY_INTEGER := 0; + V_BONUS NUMBER := 0; + V_MAXCICLE2 NUMBER; +BEGIN + + SELECT + COUNT(*) + INTO + V_NUMSPESE + FROM + CORSOPLSQL.SCONTRINI + WHERE + CODFID = V_CODFID; + + <> + FOR V_CONTATORE1 IN 1..V_NUMSPESE - 15 LOOP + DBMS_OUTPUT.PUT_LINE('Spesa ' || V_CONTATORE1); + + V_MAXCICLE2 := V_NUMSPESE - 15; + V_BONUS := 0; + + <> + FOR V_CONTATORE2 IN 1..V_MAXCICLE2 LOOP + V_BONUS := V_BONUS + 100; + DBMS_OUTPUT.PUT_LINE('Creato Bonus extra (+100) ' || V_CONTATORE2 || ' della Spesa ' || V_CONTATORE1); + END LOOP; + + DBMS_OUTPUT.PUT_LINE('Bonus Totale Spesa ' || V_CONTATORE1 || ': ' || V_BONUS); + END LOOP; + + DBMS_OUTPUT.PUT_LINE('Fatto!'); +END; diff --git a/FOR.sql b/FOR.sql new file mode 100644 index 0000000..03e183d --- /dev/null +++ b/FOR.sql @@ -0,0 +1,37 @@ +DECLARE + V_CODFID VARCHAR2(20) := :CODFID; + V_NUMSPESE BINARY_INTEGER := 0; + V_CONTATORE BINARY_INTEGER := 0; + V_MINVALUE NUMBER := 0; + V_BONUS NUMBER := 0; +BEGIN + + SELECT + COUNT(*) + INTO + V_NUMSPESE + FROM + CORSOPLSQL.SCONTRINI + WHERE + CODFID = V_CODFID; + + V_NUMSPESE := V_NUMSPESE - 15; + + -- Espressione FOR + IF (V_NUMSPESE > V_MINVALUE) THEN + -- Ciclo inverso: FOR IN REVERSE LOOP + FOR V_CONTATORE IN V_MINVALUE..V_NUMSPESE LOOP + V_BONUS := V_BONUS + 100; + DBMS_OUTPUT.PUT_LINE('Creato Bonus ' || V_CONTATORE); + + -- In alternativa EXIT WHEN V_BONUS > 500; + IF V_BONUS > 500 THEN + DBMS_OUTPUT.PUT_LINE('Bonus Massimo Raggiunto!'); + EXIT; + END IF; + + END LOOP; + END IF; + + DBMS_OUTPUT.PUT_LINE('Fatto!'); +END; diff --git a/IF-ELSE.sql b/IF-ELSE.sql new file mode 100644 index 0000000..8a158f0 --- /dev/null +++ b/IF-ELSE.sql @@ -0,0 +1,14 @@ +DECLARE + VAL_SPESA NUMBER; +BEGIN + + VAL_SPESA := 400; + IF VAL_SPESA > 500 THEN + DBMS_OUTPUT.PUT_LINE('Complimenti sei un cliente GOLD con una spesa di: ' || VAL_SPESA); + ELSIF (VAL_SPESA > 300 AND VAL_SPESA < 500) THEN + DBMS_OUTPUT.PUT_LINE('Complimenti se un cliente SILVER con una spesa di: ' || VAL_SPESA); + ELSE + DBMS_OUTPUT.PUT_LINE('Spiacente NON hai raggiunto il valore di spesa minimo (500):' || VAL_SPESA); + END IF; + +END; diff --git a/LOOP.sql b/LOOP.sql new file mode 100644 index 0000000..012d82a --- /dev/null +++ b/LOOP.sql @@ -0,0 +1,28 @@ +DECLARE + V_CODFID VARCHAR2(20) := :CODFID; + V_NUMSPESE BINARY_INTEGER := 0; + V_CONTATORE BINARY_INTEGER := 0; + V_NUMMINSPESE NUMBER := 15; +BEGIN + + SELECT + COUNT(*) + INTO + V_NUMSPESE + FROM + CORSOPLSQL.SCONTRINI + WHERE + CODFID = V_CODFID; + + -- Espressione LOOP + -- Si comporta simile all'istruzione do...while + IF V_NUMSPESE > V_NUMMINSPESE THEN + LOOP + V_CONTATORE := V_CONTATORE + 1; + DBMS_OUTPUT.PUT_LINE('Creato Bonus ' || V_CONTATORE); + EXIT WHEN V_CONTATORE = V_NUMSPESE - V_NUMMINSPESE; + END LOOP; + END IF; + + DBMS_OUTPUT.PUT_LINE('Fatto!'); +END; diff --git a/SEARCHED CASE.sql b/SEARCHED CASE.sql new file mode 100644 index 0000000..647b734 --- /dev/null +++ b/SEARCHED CASE.sql @@ -0,0 +1,28 @@ +DECLARE + V_CODFIDELITY VARCHAR2(20) := :CODFID; + V_BOLLINI NUMBER := 0; +BEGIN + + SELECT + NVL(SUM(a.BOLLINI), 0) + INTO + V_BOLLINI + FROM + CORSOPLSQL.SCONTRINI a + WHERE + a.CODFID = V_CODFIDELITY; + + DBMS_OUTPUT.PUT_LINE('Bollini: ' || V_BOLLINI); + + -- Espressioni Searched Case + CASE + WHEN V_BOLLINI > 500 THEN + DBMS_OUTPUT.PUT_LINE('Hai diritto ad un coupon da Euro 10'); + WHEN (V_BOLLINI > 300 AND V_BOLLINI < 500) THEN + DBMS_OUTPUT.PUT_LINE('Hai diritto ad un coupon di Euro 5'); + WHEN (V_BOLLINI > 100 AND V_BOLLINI < 300) THEN + DBMS_OUTPUT.PUT_LINE('Coraggio, un altro pò ed otterrai un coupon'); + ELSE + DBMS_OUTPUT.PUT_LINE('Purtroppo non hai diritto al coupon!!!'); + END CASE; +END; diff --git a/WHILE.sql b/WHILE.sql new file mode 100644 index 0000000..9478652 --- /dev/null +++ b/WHILE.sql @@ -0,0 +1,32 @@ +DECLARE + V_CODFID VARCHAR2(20) := :CODFID; + V_NUMSPESE BINARY_INTEGER := 0; + V_CONTATORE BINARY_INTEGER := 0; + V_BONUS NUMBER := 0; +BEGIN + + SELECT + COUNT(*) + INTO + V_NUMSPESE + FROM + CORSOPLSQL.SCONTRINI + WHERE + CODFID = V_CODFID; + + V_CONTATORE := V_NUMSPESE - 15; + + -- Espressione WHILE + WHILE V_CONTATORE > 0 LOOP + DBMS_OUTPUT.PUT_LINE('Creato Bonus ' || V_CONTATORE); + V_CONTATORE := V_CONTATORE - 1; + + IF V_BONUS > 0 THEN + DBMS_OUTPUT.PUT_LINE('Bonus Massimo Raggiunto!'); + EXIT; + END IF; + + END LOOP; + + DBMS_OUTPUT.PUT_LINE('Fatto!'); +END;