You need to be selecting from gtt_ai_fin_transaction. As it sits, the code is looking for something aliased gtt_ai_fin_transaction, and not finding it. -----Original Message----- From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On Behalf Of Murray Sobol Sent: Wednesday, April 30, 2014 12:34 PM To: oracle-l@xxxxxxxxxxxxx Subject: problem with a trigger (Oracle 11gR2) I am having a problem accessing a Global Temporary table inside a trigger. Here is my code: CREATE GLOBAL TEMPORARY TABLE gtt_ai_fin_transaction ( transaction_nbr number null, gl_date date null, transaction_amount number(18,6) null, discount_taken_amount number(18,6) null, after_balance_amount number(18,6) null, after_status char(1) null ) ON COMMIT DELETE ROWS tablespace temp / CREATE or replace TRIGGER ai_fin_transaction AFTER INSERT ON fin_transaction FOR EACH ROW DECLARE TransactionNumber number; TransactionAmount number(18,6); DiscountTakenAmount number(18,6); AfterBalanceAmount number(18,6); InvoiceNbr number; CURSOR transactions IS WITH MaxGLdate (invoice_nbr,gl_date) AS (SELECT ft.invoice_nbr, MAX(ft.gl_date) FROM fin_transaction ft WHERE ft.invoice_nbr = :new.invoice_nbr GROUP BY ft.invoice_nbr ) SELECT :new.invoice_nbr FROM dual JOIN MaxGLdate mgld ON :new.invoice_nbr = mgld.invoice_nbr WHERE :new.gl_date < mgld.gl_date; CURSOR recalculate IS SELECT transaction_nbr, transaction_amount, discount_taken_amount FROM gtt_ai_fin_transaction ORDER BY gl_date, transaction_nbr; BEGIN IF (:new.invoice_nbr IS NOT NULL) THEN UPDATE fin_invoice SET last_transaction_date = :new.transaction_date WHERE invoice_nbr = :new.invoice_nbr; END IF; IF (:new.payment_nbr IS NOT NULL) THEN UPDATE fin_payment SET last_transaction_date = :new.transaction_date WHERE payment_nbr = :new.payment_nbr; END IF; OPEN transactions; LOOP FETCH transactions INTO InvoiceNbr; EXIT WHEN transactions%NOTFOUND; DELETE FROM gtt_ai_fin_transaction; INSERT INTO gtt_ai_fin_transaction SELECT transaction_nbr, gl_date, CASE WHEN transaction_type IN ('PAY','CON','CRD','PAD','ADJ','ACC') THEN transaction_amount * -1 ELSE transaction_amount END, CASE WHEN transaction_type IN ('PAY','CON','CRD','PAD','ADJ','ACC') THEN discount_taken_amount * -1 ELSE discount_taken_amount END, 0.00, NULL FROM fin_transaction WHERE invoice_nbr = InvoiceNbr AND payment_nbr IS NOT NULL ORDER BY gl_date, transaction_nbr; SELECT after_balance_amount INTO AfterBalanceAmount FROM fin_transaction WHERE invoice_nbr = InvoiceNbr AND payment_nbr IS NULL; OPEN recalculate; LOOP FETCH recalculate INTO TransactionNumber, TransactionAmount, DiscountTakenAmount; EXIT WHEN recalculate%NOTFOUND; AfterBalanceAmount := AfterBalanceAmount + TransactionAmount + DiscountTakenAmount; UPDATE gtt_ai_fin_transaction SET after_balance_amount = AfterBalanceAmount, after_status = CASE WHEN AfterBalanceAmount = 0.00 THEN 'C' ELSE 'O' END WHERE transaction_nbr = TransactionNumber; END LOOP; UPDATE fin_transaction SET fin_transaction.after_balance_amount = gtt_ai_fin_transaction.after_balance_amount, fin_transaction.after_status = gtt_ai_fin_transaction.after_status WHERE fin_transaction.transaction_nbr = gtt_ai_fin_transaction.transaction_nbr; END LOOP; END; And here is the error: AI_FIN_TRANSACTION TRIGGER 1 128 50 PL/SQL: ORA-00904: "GTT_AI_FIN_TRANSACTION"."TRANSACTION_NBR": invalid identifier ERROR 0 AI_FIN_TRANSACTION TRIGGER 2 125 9 PL/SQL: SQL Statement ignored ERROR 0 The error is pointing to this "update" statement but I don't understand why. UPDATE fin_transaction SET fin_transaction.after_balance_amount = gtt_ai_fin_transaction.after_balance_amount, fin_transaction.after_status = gtt_ai_fin_transaction.after_status WHERE fin_transaction.transaction_nbr = gtt_ai_fin_transaction.transaction_nbr; Thanks Murray Sobol Murray.sobol@xxxxxxxxxxxx murrays@xxxxxxxxxxxxxxxxxxxx -- //www.freelists.org/webpage/oracle-l -- //www.freelists.org/webpage/oracle-l