Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    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 un record 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 ?
    Pippo Giacalone
    giacalone@tin.it

  2. #2
    Pippo Giacalone
    giacalone@tin.it

  3. #3
    perchè lo chiedi nel forum asp ?

    Ciau!
    - Dean

  4. #4
    è vero, hai ragione .. ma dove dovrei chiederlo ?
    Pippo Giacalone
    giacalone@tin.it

  5. #5
    intanto grazie lo stesso ... credo di aver risolto il dilemma:

    incollo il codice se può servire:

    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;
    Pippo Giacalone
    giacalone@tin.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.