diff --git a/procedure/PROCEDURA_1.sql b/procedure/PROCEDURA_1.sql new file mode 100644 index 0000000..9a823f3 --- /dev/null +++ b/procedure/PROCEDURA_1.sql @@ -0,0 +1,30 @@ +--Creazione Procedura PremioBollini +CREATE OR REPLACE PROCEDURE Sp_GenPremioBollini(Anno_I IN NUMBER, Mese_I IN NUMBER) +AS + --Creazione del cursore + CURSOR C_BestCli(V_MeseRif NUMBER, V_AnnoRif NUMBER) + IS + SELECT DISTINCT CODFID + FROM SCONTRINI + WHERE CODFID <> '-1' + AND EXTRACT(YEAR FROM DATA) = V_AnnoRif + AND EXTRACT(MONTH FROM DATA) = V_MeseRif + GROUP BY CODFID + HAVING SUM(TOTALE) >= 500; + +BEGIN + + FOR R_BestCli IN C_BestCli(Mese_I,Anno_I) + LOOP + UPDATE CARDS_TEMP + SET BOLLINI = BOLLINI + 500 + WHERE CODFIDELITY = R_BestCli.CODFID; + + DBMS_OUTPUT.PUT_LINE ('Aggiunti 500 Punti alla Fidelity: ' || R_BestCli.CODFID || '.'); + + END LOOP; + + commit; + +END; + diff --git a/procedure/PROCEDURA_2.sql b/procedure/PROCEDURA_2.sql new file mode 100644 index 0000000..a8c267f --- /dev/null +++ b/procedure/PROCEDURA_2.sql @@ -0,0 +1,23 @@ +-- Procedure SelArticolo V.1 + +CREATE OR REPLACE PROCEDURE Sp_SelArticolo +( +I_CodArt IN VARCHAR2, +O_DesArt OUT VARCHAR2, +O_Prezzo OUT VARCHAR2 +) +AS +BEGIN + + SELECT A.CODART ||' '|| A.DESCRIZIONE AS Articolo, BB.PREZZO + INTO O_DesArt, O_Prezzo + FROM ARTICOLI A LEFT JOIN + (SELECT CODART, PREZZO FROM DETTLISTINI WHERE IDLIST = 1) BB + ON A.CODART = BB.CODART + WHERE A.CODART = I_CodArt; + +EXCEPTION +WHEN OTHERS THEN +DBMS_OUTPUT.PUT_LINE('Errore nella ricerca del codice: ' || I_CodArt); + +END Sp_SelArticolo; \ No newline at end of file diff --git a/procedure/PROCEDURA_3.sql b/procedure/PROCEDURA_3.sql new file mode 100644 index 0000000..233b50e --- /dev/null +++ b/procedure/PROCEDURA_3.sql @@ -0,0 +1,30 @@ +--Creazione Procedura PremioBollini +CREATE OR REPLACE PROCEDURE Sp_GenPremioBollini +AS + --Creazione del cursore + CURSOR C_BestCli(V_MeseRif NUMBER, V_AnnoRif NUMBER) + IS + SELECT DISTINCT CODFID + FROM SCONTRINI + WHERE CODFID <> '-1' + AND EXTRACT(YEAR FROM DATA) = V_AnnoRif + AND EXTRACT(MONTH FROM DATA) = V_MeseRif + GROUP BY CODFID + HAVING SUM(TOTALE) >= 500; + +BEGIN + + FOR R_BestCli IN C_BestCli(7,2017) + LOOP + UPDATE CARDS_TEMP + SET BOLLINI = BOLLINI + 500 + WHERE CODFIDELITY = R_BestCli.CODFID; + + DBMS_OUTPUT.PUT_LINE ('Aggiunti 500 Punti alla Fidelity: ' || R_BestCli.CODFID || '.'); + + END LOOP; + + commit; + +END; + diff --git a/procedure/PROCEDURA_4.sql b/procedure/PROCEDURA_4.sql new file mode 100644 index 0000000..f8ffcb7 --- /dev/null +++ b/procedure/PROCEDURA_4.sql @@ -0,0 +1,18 @@ + + CREATE OR REPLACE PROCEDURE Sp_SelCliente(CODFID_I IN CLIENTI.CODFIDELITY%TYPE, + RECORDSET_P OUT SYS_REFCURSOR) + IS + BEGIN + + OPEN RECORDSET_P FOR + SELECT + A.CODFIDELITY, + A.NOME, + A.COGNOME, + A.COMUNE, + A.PROV, + A.STATO + FROM CLIENTI A + WHERE A.CODFIDELITY = CODFID_I; + +END Sp_SelCliente; diff --git a/procedure/PROCEDURA_5.sql b/procedure/PROCEDURA_5.sql new file mode 100644 index 0000000..3cb779d --- /dev/null +++ b/procedure/PROCEDURA_5.sql @@ -0,0 +1,51 @@ +CREATE OR REPLACE PROCEDURE Sp_GenCoupon +(NumSpese_I IN NUMBER, Mese_I IN NUMBER) +AS +ValSpesa_FascA CONSTANT NUMBER := 800; +QtaCoup_FascA CONSTANT NUMBER := 5; +ValSpesa_FascB CONSTANT NUMBER := 500; +QtaCoup_FascB CONSTANT NUMBER := 3; +ValSpesa_FascC CONSTANT NUMBER := 200; +QtaCoup_FascC CONSTANT NUMBER := 1; + +--Creazione Cursore: I migliori n clienti +CURSOR C_BestCli IS + SELECT AA.* FROM + ( + SELECT + CODFID, + TOTVEND, + QTASPESE, + MESE + FROM VW_SpeseCliFid + WHERE CODFID <> '-1' AND + MESE = Mese_I + ) AA + WHERE rownum <= NumSpese_I; + +BEGIN + DELETE FROM COUPONS WHERE MESE = Mese_I + 1; + + FOR R_BestCli IN C_BestCli + LOOP + IF R_BestCli.TOTVEND >= ValSpesa_FascA THEN + INSERT INTO COUPONS + VALUES(to_char(sysdate, 'YYYY'), R_BestCli.MESE + 1, R_BestCli.CODFID, QtaCoup_FascA); + ELSIF R_BestCli.TOTVEND >= ValSpesa_FascB AND R_BestCli.TOTVEND < ValSpesa_FascA THEN + INSERT INTO COUPONS + VALUES(to_char(sysdate, 'YYYY'), R_BestCli.MESE + 1, R_BestCli.CODFID, QtaCoup_FascB); + ELSIF R_BestCli.TOTVEND >= ValSpesa_FascC AND R_BestCli.TOTVEND < ValSpesa_FascB THEN + INSERT INTO COUPONS + VALUES(to_char(sysdate, 'YYYY'), R_BestCli.MESE + 1, R_BestCli.CODFID, QtaCoup_FascC); + END IF; + END LOOP; + + COMMIT; + + DBMS_OUTPUT.PUT_LINE('Creazione Coupon Eseguita con Successo'); + + EXCEPTION + WHEN NO_DATA_FOUND + THEN + DBMS_OUTPUT.PUT_LINE('Non è stato trovato alcun cliente con i criteri ricercati'); +END Sp_GenCoupon; \ No newline at end of file