PLS-00201:必须在ORACLE TRIGGER中声明标识符



我有这组数据。我想开发一个触发器,当ICICUT=IB的行更新时会触发。到目前为止,由于错误"PLS-00201:必须声明标识符"OLD.ICICUT",这是一个挑战。我错过了什么?

ICICUT    ICICU          ICAME  
IB        11368          65625         
V         711340         63808       
V         711313         24812    
IB        711265         60238        
O         711322         21570   
RB        711370         348590 

我的扳机。。。。

CREATE OR REPLACE TRIGGER EOGONY.F0011_audit
BEFORE UPDATE
ON INVOICES 
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
WHEN (OLD.ICICUT = 'IB')
ENABLE
DECLARE
v_date  varchar2(30);
BEGIN
SELECT TO_CHAR(sysdate, 'DD/MON/YYYY HH24:MI:SS') INTO v_date from dual;
INSERT INTO AUDIT_HISTORY_F0011 (ICICUT, ICICU, ICUSER, ICDICJ, OLD_ICAME, NEW_ICAME, ENTRY_DATE, OPERATION) 
VALUES (:OLD.ICICUT, :OLD.ICICU , :NEW.ICUSER, :OLD.ICDICJ, :OLD.ICAME, :NEW.ICAME, v_date, 'Updating');
END;

在应用这些更改后,我成功地编译了没有错误的代码。。。

CREATE OR REPLACE TRIGGER EOGONY.F0011_audit
BEFORE UPDATE
ON INVOICES 
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
ENABLE
DECLARE
v_date  varchar2(30);
BEGIN
IF ( :OLD.ICICUT = 'IB' ) THEN
SELECT TO_CHAR(sysdate, 'DD/MON/YYYY HH24:MI:SS') INTO v_date from dual;
INSERT INTO AUDIT_HISTORY_F0011 (ICICUT, ICICU, ICUSER, ICDICJ, OLD_ICAME, NEW_ICAME, ENTRY_DATE, OPERATION) 
VALUES (:OLD.ICICUT, :OLD.ICICU , :NEW.ICUSER, :OLD.ICDICJ, :OLD.ICAME, :NEW.ICAME, v_date, 'Updating');
END IF;
END;
/

我不知道原因,但经过测试,:NEW或:OLD参数有时不能在DML中使用,你需要声明局部变量(例如v_INCT(并为它们分配NEW/OLD参数,并在插入脚本中使用局部变量,编译就可以了。你可以试试。

最新更新