Files
corso-plsql/package/PACKAGE_4.sql
Fabio Scotto di Santolo a92904f06e Esempi sui package
2019-09-27 19:31:24 +02:00

171 lines
4.8 KiB
SQL

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