Statement di controllo e di iterazione

This commit is contained in:
Fabio Scotto di Santolo
2019-09-11 22:52:25 +02:00
parent 6a846296a9
commit dbf7aa62ef
7 changed files with 203 additions and 0 deletions

28
CASE-WHEN.sql Normal file
View File

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

36
CICLI-ANNIDATI.sql Normal file
View File

@@ -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;
<<SPESE>>
FOR V_CONTATORE1 IN 1..V_NUMSPESE - 15 LOOP
DBMS_OUTPUT.PUT_LINE('Spesa ' || V_CONTATORE1);
V_MAXCICLE2 := V_NUMSPESE - 15;
V_BONUS := 0;
<<BONUS>>
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;

37
FOR.sql Normal file
View File

@@ -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 <CONTATORE> IN REVERSE <RANGE> 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;

14
IF-ELSE.sql Normal file
View File

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

28
LOOP.sql Normal file
View File

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

28
SEARCHED CASE.sql Normal file
View File

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

32
WHILE.sql Normal file
View File

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