Esempi sulle store procedure
This commit is contained in:
30
procedure/PROCEDURA_1.sql
Normal file
30
procedure/PROCEDURA_1.sql
Normal 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
23
procedure/PROCEDURA_2.sql
Normal 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
30
procedure/PROCEDURA_3.sql
Normal 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
18
procedure/PROCEDURA_4.sql
Normal 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
51
procedure/PROCEDURA_5.sql
Normal 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;
|
||||||
Reference in New Issue
Block a user