Esempi sui package

This commit is contained in:
Fabio Scotto di Santolo
2019-09-27 19:31:24 +02:00
parent 810a9c6987
commit a92904f06e
4 changed files with 271 additions and 0 deletions

11
package/PACKAGE_1.sql Normal file
View File

@@ -0,0 +1,11 @@
CREATE OR REPLACE PACKAGE GestClienti
AS
PROCEDURE Sp_SelStorSpese (CODFID_I IN CARDS.CODFIDELITY%TYPE,
RECORDSET_P OUT SYS_REFCURSOR);
FUNCTION Uf_GetMonteBollini(CODFID_I IN CARDS.CODFIDELITY%TYPE)
RETURN NUMBER;
END GestClienti;

44
package/PACKAGE_2.sql Normal file
View File

@@ -0,0 +1,44 @@
CREATE OR REPLACE PACKAGE BODY GestClienti
AS
--CORPO DELLA PROCEDURA Sp_SelStorSpese
PROCEDURE Sp_SelStorSpese(CODFID_I IN CARDS.CODFIDELITY%TYPE,
RECORDSET_P OUT SYS_REFCURSOR)
IS
BEGIN
OPEN RECORDSET_P FOR
SELECT
A.DATA,
A.IDDEPOSITO,
A.CASSA,
A.SCONTRINO,
A.BOLLINI,
B.CODFIDELITY,
B.NOME || ' ' || B.COGNOME AS Nominativo
FROM SCONTRINI A JOIN CLIENTI B
ON a.CODFID = B.CODFIDELITY
WHERE B.CODFIDELITY = CODFID_I
ORDER BY A.DATA DESC;
END Sp_SelStorSpese;
--CORPO DELLA FUNZIONE Uf_GetMonteBollini
FUNCTION Uf_GetMonteBollini(CODFID_I IN CARDS.CODFIDELITY%TYPE)
RETURN NUMBER
IS
V_RetVal number;
BEGIN
SELECT BOLLINI INTO V_RetVal
FROM CARDS WHERE CODFIDELITY = CODFID_I;
RETURN V_RetVal;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END Uf_GetMonteBollini;
END GestClienti;

45
package/PACKAGE_3.sql Normal file
View File

@@ -0,0 +1,45 @@
--Esempio Creazione Package Articolato
CREATE OR REPLACE PACKAGE GestArt
AS
TYPE articoli_type IS RECORD
(CodArt ARTICOLI.CODART%TYPE,
Descrizione ARTICOLI.DESCRIZIONE%TYPE,
Um ARTICOLI.UM%TYPE,
PzCart ARTICOLI.PZCART%TYPE,
CodStat ARTICOLI.CODSTAT%TYPE,
PesoNetto ARTICOLI.PESONETTO%TYPE,
Iva ARTICOLI.IDIVA%TYPE,
Stato ARTICOLI.IDSTATOART%TYPE,
IdFamAss ARTICOLI.IDFAMASS%TYPE,
Reparto FAMASSORT.DESCRIZIONE%TYPE,
QtaMag NUMBER
);
TYPE Info_Articolo IS REF CURSOR RETURN articoli_type;
PROCEDURE Sp_SelArticolo(CODART_I IN ARTICOLI.CODART%TYPE,
ARTICOLO_O OUT Info_Articolo);
PROCEDURE Sp_SelArticolo(Parametro IN ARTICOLI.DESCRIZIONE%TYPE, Tipo IN NUMBER,
RECORDSET_P OUT SYS_REFCURSOR);
PROCEDURE Sp_DelArticolo(CODART_I IN ARTICOLI.CODART%TYPE);
PROCEDURE Sp_InsArticolo(CODART_I IN ARTICOLI.CODART%TYPE,
DESCRIZIONE_I IN ARTICOLI.DESCRIZIONE%TYPE, UM_I IN ARTICOLI.UM%TYPE,
CODSTAT_I IN ARTICOLI.CODSTAT%TYPE, PZCART_I IN ARTICOLI.PZCART%TYPE,
PESONETTO_I IN ARTICOLI.PESONETTO%TYPE, IDIVA_I IN ARTICOLI.IDIVA%TYPE,
IDSTATO_I IN ARTICOLI.IDSTATOART%TYPE, IDFAMASS_I IN ARTICOLI.IDFAMASS%TYPE);
FUNCTION Uf_GetQtaMag(CODART_I IN ARTICOLI.CODART%TYPE)
RETURN NUMBER;
FUNCTION IsArtPresent(CODART_I IN ARTICOLI.CODART%TYPE)
RETURN BOOLEAN;
FUNCTION Uf_GetVenMese(CODART_I IN ARTICOLI.CODART%TYPE, MeseRif_I NUMBER, AnnoRif_I NUMBER)
RETURN NUMBER;
END GestArt;

171
package/PACKAGE_4.sql Normal file
View File

@@ -0,0 +1,171 @@
--PACKAGE GestArt
CREATE OR REPLACE PACKAGE BODY GestArt
AS
tSQL varchar2(300);
--CORPO DELLA PROCEDURA IsArtPresent
PROCEDURE Sp_InsArticolo(CODART_I IN ARTICOLI.CODART%TYPE,
DESCRIZIONE_I IN ARTICOLI.DESCRIZIONE%TYPE, UM_I IN ARTICOLI.UM%TYPE,
CODSTAT_I IN ARTICOLI.CODSTAT%TYPE, PZCART_I IN ARTICOLI.PZCART%TYPE,
PESONETTO_I IN ARTICOLI.PESONETTO%TYPE, IDIVA_I IN ARTICOLI.IDIVA%TYPE,
IDSTATO_I IN ARTICOLI.IDSTATOART%TYPE, IDFAMASS_I IN ARTICOLI.IDFAMASS%TYPE)
IS
V_IfExists BOOLEAN;
BEGIN
V_IfExists := IsArtPresent(CODART_I);
IF V_IfExists = TRUE THEN
UPDATE ARTICOLI
SET
DESCRIZIONE = DESCRIZIONE_I,
UM = UM_I,
CODSTAT = CODSTAT_I,
PZCART = PZCART_I,
PESONETTO = PESONETTO_I,
IDIVA = IDIVA_I,
IDSTATOART = IDSTATO_I,
IDFAMASS = IDFAMASS_I
WHERE CODART = CODART_I;
ELSE
INSERT INTO ARTICOLI
VALUES(CODART_I,DESCRIZIONE_I,UM_I,CODSTAT_I,PZCART_I,
PESONETTO_I,IDIVA_I,IDSTATO_I,SYSDATE,IDFAMASS_I);
END IF;
END Sp_InsArticolo;
--CORPO DELLA FUNZIONE Uf_GetQtaMag
FUNCTION Uf_GetQtaMag(CODART_I IN ARTICOLI.CODART%TYPE)
RETURN NUMBER
AS
V_RetVal NUMBER;
BEGIN
SELECT (ACQUISTATO - RESO - VENDUTO - USCITE - SCADUTI) INTO V_RetVal
FROM MOVIMENTI
WHERE
CODART = CODART_I;
RETURN V_RetVal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 0;
WHEN TOO_MANY_ROWS THEN
RAISE_APPLICATION_ERROR (-20001, 'Errore Calcolo Magazzino Articolo ' || CODART_I);
RETURN 0;
END Uf_GetQtaMag;
--CORPO DELLA FUNZIONE Uf_GetVenMese
FUNCTION Uf_GetVenMese(CODART_I IN ARTICOLI.CODART%TYPE, MeseRif_I NUMBER, AnnoRif_I NUMBER)
RETURN NUMBER
AS
V_RetVal NUMBER;
BEGIN
SELECT SUM(VALORE) INTO V_RetVal
FROM VW_SCONTRINI
WHERE
CODART = CODART_I AND
EXTRACT(MONTH FROM DATA) = MeseRif_I AND
EXTRACT(YEAR FROM DATA) = AnnoRif_I;
RETURN V_RetVal;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END Uf_GetVenMese;
--CORPO DELLA FUNZIONE IsArtPresent
FUNCTION IsArtPresent(CODART_I IN ARTICOLI.CODART%TYPE)
RETURN BOOLEAN
IS
V_Count_Art number;
BEGIN
SELECT COUNT(*) INTO V_Count_Art
FROM ARTICOLI WHERE CODART = CODART_I;
IF (V_Count_Art > 0) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN OTHERS
THEN
RETURN FALSE;
END IsArtPresent;
--CORPO DELLA PROCEDURA Sp_SelArticolo
PROCEDURE Sp_SelArticolo(CODART_I IN ARTICOLI.CODART%TYPE,
ARTICOLO_O OUT Info_Articolo)
IS
BEGIN
OPEN ARTICOLO_O FOR
SELECT
A.CODART,
A.DESCRIZIONE,
A.UM,
A.PZCART,
A.CODSTAT,
A.PESONETTO,
A.IDIVA AS IVA,
A.IDSTATOART AS STATO,
A.IDFAMASS,
TRIM(B.DESCRIZIONE) AS REPARTO,
Uf_GetQtaMag(A.CODART) AS QtaMag
FROM ARTICOLI A JOIN FAMASSORT B
ON A.IDFAMASS = B.ID
WHERE CODART = CODART_I;
END Sp_SelArticolo;
--CORPO DELLA PROCEDURA Sp_SelArticolo
PROCEDURE Sp_SelArticolo(Parametro IN ARTICOLI.DESCRIZIONE%TYPE, Tipo IN NUMBER,
RECORDSET_P OUT SYS_REFCURSOR)
IS
BEGIN
tSQL := 'SELECT
CODART,
DESCRIZIONE,
UM,
PZCART,
CODSTAT,
PESONETTO,
IDIVA AS IVA,
IDSTATOART AS STATO,
IDFAMASS
FROM ARTICOLI ';
IF Tipo = 1 THEN --CASO CODART
OPEN RECORDSET_P FOR
tSQL || ' WHERE CODART = :1'
USING PARAMETRO;
ELSIF TIPO = 2 THEN --CASO DESCRIZIONE
OPEN RECORDSET_P FOR
tSQL || ' WHERE DESCRIZIONE LIKE :1'
USING PARAMETRO;
ELSIF TIPO = 3 THEN --CASE BARCODE
OPEN RECORDSET_P FOR
tSQL || ' CODART IN (SELECT CODART FROM BARCODE WHERE BARCODE = :1)'
USING PARAMETRO;
END IF;
END Sp_SelArticolo;
--CORPO DELLA PROCEDURA Sp_DelArticolo
PROCEDURE Sp_DelArticolo(CODART_I IN ARTICOLI.CODART%TYPE)
AS
BEGIN
IF IsArtPresent(CODART_I) THEN
DELETE FROM ARTICOLI WHERE CODART = CODART_I;
END IF;
END;
END GestArt;