Esempi sulle store procedure

This commit is contained in:
Fabio Scotto di Santolo
2019-09-25 22:48:03 +02:00
parent 585372ff49
commit 802f67fb39
5 changed files with 152 additions and 0 deletions

30
procedure/PROCEDURA_1.sql Normal file
View File

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

23
procedure/PROCEDURA_2.sql Normal file
View File

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

30
procedure/PROCEDURA_3.sql Normal file
View File

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

18
procedure/PROCEDURA_4.sql Normal file
View File

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

51
procedure/PROCEDURA_5.sql Normal file
View File

@@ -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 <20> stato trovato alcun cliente con i criteri ricercati');
END Sp_GenCoupon;