ORACLE: Trigger da modificare

di il
2 risposte

ORACLE: Trigger da modificare

Ciao a tutti Buon Anno,

ho scritto un trigger su oracle che mi permette, ogni volta che una transazione viene chiusa, di inserire o modificare la quantità dell'articolo venduto in una nuova tabella.

Scenario:

TB_TRANSACTIONS; --- Tabella testate vendite ----
TB_TRANS_ARTICLES: --- Tabella dettagli artricoli venduti ---
TB_POS_GIACENZE; --- Tabella da me creata con i dati essenziali per le giacenze ---
TriggerGIACENZE; --- Il trigger che si occupa di aggiornare le giacenze su TB_POS_GIACENZE ---


---------------------------------------------------------------

Codice Trigger:

create or replace
TRIGGER TriggerGIACENZE
AFTER INSERT
ON TB_TRANS_ARTICLES
FOR EACH ROW

DECLARE
ART TB_POS_GIACENZE%ROWTYPE;

BEGIN

SELECT * INTO ART
FROM TB_POS_GIACENZE
WHERE ARTICLE_ID = :NEW.ARTICLE_ID AND CASHREG_ID = :NEW.POS_ID;
IF :NEW.DELETE_OPERATOR_ID IS NULL THEN
UPDATE TB_POS_GIACENZE
SET QTA = QTA + :NEW.QTY_WEIGHT,
PRICE = PRICE + :NEW.PRICE
WHERE ARTICLE_ID = :NEW.ARTICLE_ID AND CASHREG_ID = :NEW.POS_ID;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
IF :NEW.DELETE_OPERATOR_ID IS NULL THEN
INSERT INTO TB_POS_GIACENZE ( ARTICLE_ID, CASHREG_ID, QTA, PRICE )
VALUES ( :NEW.ARTICLE_ID, :NEW.POS_ID , :NEW.QTY_WEIGHT, :NEW.PRICE );
END IF;
END;

---------------------------------------------------------------

Problema:

il POS_ID, che doveva essere l'ID della cassa che chiude la transazione, risulta essere tutt'altra cosa.....

Il CASHREG_ID che a me serve si trova nella testata cioè su TB_TRANSACTIONS.

Dopo vari tentativi mi sono arreso ... non so proprio come modificare il Trigger, mi sapete aiutare ?

2 Risposte

  • Re: ORACLE: Trigger da modificare

  • Re: ORACLE: Trigger da modificare

    Risolto:

    CREATE OR REPLACE TRIGGER TriggerGIACENZE
    AFTER INSERT
    ON TB_TRANS_ARTICLES
    FOR EACH ROW

    DECLARE

    ART TB_POS_GIACENZE%ROWTYPE;

    BEGIN
    SELECT * INTO ART
    FROM TB_POS_GIACENZE
    WHERE ARTICLE_ID = :NEW.ARTICLE_ID AND CASHREG_ID = (SELECT CASHREG_ID FROM TB_TRANSACTIONS WHERE ID = :NEW.TRANSACTION_ID);
    IF :NEW.DELETE_OPERATOR_ID IS NULL THEN
    UPDATE TB_POS_GIACENZE
    SET QTA = QTA + :NEW.QTY_WEIGHT,
    PRICE = PRICE + :NEW.PRICE
    WHERE ARTICLE_ID = :NEW.ARTICLE_ID AND CASHREG_ID = (SELECT CASHREG_ID FROM TB_TRANSACTIONS WHERE ID = :NEW.TRANSACTION_ID);
    END IF;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    IF :NEW.DELETE_OPERATOR_ID IS NULL THEN
    INSERT INTO TB_POS_GIACENZE ( ARTICLE_ID, CASHREG_ID, QTA, PRICE )
    VALUES ( :NEW.ARTICLE_ID, (SELECT CASHREG_ID FROM TB_TRANSACTIONS WHERE ID = :NEW.TRANSACTION_ID), :NEW.QTY_WEIGHT, :NEW.PRICE );
    END IF;
    END;
Devi accedere o registrarti per scrivere nel forum
2 risposte