我在创建触发器时遇到问题

时间:2020-05-11 17:33:49

标签: oracle plsql

create trigger audit_trail01
    after update or delete on cust_mstr
    for each row
declare
    open varchar2(8);
begin
    if updating then
        open := 'UPDATE';
    elsif deleting then
        open := 'Delete';
    end if;

    insert into audit_cust
        ( cust_no
        , fname
        , mname
        , lname
        , dob_inc
        , occup
        , pancopy
        , fqrm60
        , operation
        , userid
        , opdate )
    values
        ( :old.cust_no
        , :old.fname
        , :old.mname
        , :old.lname
        , :old.dob_inc
        , :old.occup
        , :old.pancopy
        , :old.fqrm6o
        , open
        , user
        , sysdate );
end;

我已经写了上面的内容,但它显示了以下错误:

错误:

TRIGGER AUDIT_TRAIL01行/彩色:5/8
PLS-00103:预期以下其中一项时遇到符号“ =”:
模 绑定变量>继续当前的sql执行forall合并管道清除 json_exists json_value json_query json_object json_array

1 个答案:

答案 0 :(得分:0)

OPEN是保留关键字,您不能将其用于变量。将OPEN更改为lv_OPEN。 有关PL / SQL的oracle保留字,请参考oracle文档。 https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/reservewords.htm#LNPLS019

CREATE TRIGGER AUDIT_TRAIL01
    AFTER UPDATE OR DELETE ON CUST_MSTR 
    FOR EACH ROW 
    DECLARE 
    lv_OPEN VARCHAR2(8); 
    BEGIN 
    IF UPDATING THEN
      lv_OPEN := 'UPDATE'; 
    ELSIF DELETING THEN
      lv_OPEN := 'Delete'; 
    END IF;
    INSERT  INTO AUDIT_CUST (CUST_NO,FNAME,MNAME,LNAME,DOB_INC,OCCUP,PANCOPY,FQRM60,OPERATION,USERID,OPDATE)
    VALUES(:OLD.CUST_NO,:OLD.FNAME, :OLD.MNAME,:OLD.LNAME, :OLD.DOB_INC,:OLD.OCCUP ,:OLD.PANCOPY, :OLD.FQRM6O,lv_OPEN,USER,SYSDATE); 

    END;