diff --git a/package/PACKAGE_1.sql b/package/PACKAGE_1.sql new file mode 100644 index 0000000..8031563 --- /dev/null +++ b/package/PACKAGE_1.sql @@ -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; \ No newline at end of file diff --git a/package/PACKAGE_2.sql b/package/PACKAGE_2.sql new file mode 100644 index 0000000..e89a862 --- /dev/null +++ b/package/PACKAGE_2.sql @@ -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; \ No newline at end of file diff --git a/package/PACKAGE_3.sql b/package/PACKAGE_3.sql new file mode 100644 index 0000000..560b403 --- /dev/null +++ b/package/PACKAGE_3.sql @@ -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; \ No newline at end of file diff --git a/package/PACKAGE_4.sql b/package/PACKAGE_4.sql new file mode 100644 index 0000000..0e64605 --- /dev/null +++ b/package/PACKAGE_4.sql @@ -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; \ No newline at end of file