Plsql 触发器问题-仅为最后一行触发
我有下面的触发器定义,问题是它只在最后一行触发,这是更新的,而不是在前几行Plsql 触发器问题-仅为最后一行触发,plsql,oracle11g,Plsql,Oracle11g,我有下面的触发器定义,问题是它只在最后一行触发,这是更新的,而不是在前几行 CREATE OR REPLACE TRIGGER APPS.cx_iby_trxn_summary_au AFTER UPDATE ON ar.ar_receivable_applications_all REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW WHEN ( NEW.APPLIED_CUSTOMER_TRX_ID IS NOT NULL AND NEW.STATUS
CREATE OR REPLACE TRIGGER APPS.cx_iby_trxn_summary_au
AFTER UPDATE
ON ar.ar_receivable_applications_all
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
WHEN (
NEW.APPLIED_CUSTOMER_TRX_ID IS NOT NULL AND
NEW.STATUS = 'APP' AND
NEW.DISPLAY = 'Y'
)
DECLARE
vn_cash_receipt_id NUMBER := -1;
BEGIN
insert into cx_log values('Cash Receipt :' || :NEW.RECEIVABLE_APPLICATION_ID);
BEGIN
SELECT acra.cash_receipt_id
INTO vn_cash_receipt_id
FROM ar_cash_receipts_all acra,
iby_trxn_summaries_all itsa
WHERE acra.cash_receipt_id = :NEW.CASH_RECEIPT_ID
AND acra.receipt_number LIKE 'IEX_%'
AND acra.payment_trxn_extension_id IS NOT NULL
AND itsa.initiator_extension_id = acra.payment_trxn_extension_id
AND itsa.reqtype = 'ORAPMTREQ'
AND itsa.instrtype = 'CREDITCARD'
AND itsa.status = 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
insert into cx_log values('10 NODATAFOUND:' || dbms_utility.format_error_backtrace);
WHEN OTHERS THEN
insert into cx_log values('20 Exception:' || dbms_utility.format_error_backtrace);
END;
IF vn_cash_receipt_id > 0 THEN
INSERT INTO cx_log values('Cash Receipt ID:' || :NEW.CASH_RECEIPT_ID
|| '--Customer TrxId:' || :NEW.APPLIED_CUSTOMER_TRX_ID
|| '--p_line_amount:' || :NEW.AMOUNT_APPLIED
|| '--p_tax:' || :NEW.TAX_APPLIED
|| '--p_freight:' || :NEW.FREIGHT_APPLIED);
END IF;
END;
/
Table Structure:
ar_cash_receipts_all
- ar_receivable_applications_all
问题是,当有多行时,最后一个insert语句只调用一次。ar\u cash\u receipts\u all中的一行应该在触发触发器之前就存在,因为该表是父表,但由于某些原因,下面的查询sql没有找到“vn\u cash\u receipts\u id”。有没有关于为什么找不到第一行的想法?问题陈述没有意义。当条件时,最后一行是唯一满足条件的行,或者触发器实际为插入的每一行触发。也许您的查询没有返回您期望的数据。如果没有一个可复制的测试用例,任何人都很难猜测为什么会这样。@JustinCave就像你提到的,我的查询不是在iby_trxn_summaries_all中找到行,但是如果ar_received_applications_all表获得一个新值作为'APP',它应该在iby_trxn_summaries_all表中有一行吗?我们可以追踪它为什么不这样做吗?我只需要浏览其他表中存在的数据,记录触发器看到的内容,找出哪个表没有您期望的数据。@谢谢。如果是这样的话。你能结束这个问题吗?我可以投票结束。你应该能够在不等待额外投票的情况下结束自己的问题。