在sql developer中创建触发器时发生编译器错误;

时间:2018-07-31 10:22:47

标签: oracle plsql

我有两个表:

create table superheroes('sh_name varchar2(30));
create table sh_audit(new_name varchar2(30), old_name varchar2(30), username varchar2(30), entry_date varchar2(30), operation);

触发:

create or replace trigger SUPERHEROES_AUDIT
before insert or update or delete on superheroes
for each row
enable
declare
    v_user varchar2(30);
    v_date varchar2(30);
begin
    select user, TO_CHAR(SYSDATE,' DD/MM/YYYY HH24:MI:SS') INTO v_user, v_date from dual;
    if inserting then
        insert into sh_audit(new_name, old_name, username, entry_date, operation)
        values(:NEW.sh_name, null, v_user, v_date,'insert');
    elsif deleting then
        insert into sh_audit(new_name, old_name, username, entry_date, operation)
        values(null, :OLD.sh_name, v_user, v_date,'delete');
    elsif updateing then
         insert into sh_audit(new_name, old_name, username, entry_date, operation)
         values(:NEW.sh_name, :OLD.sh_name, v_user, v_date,'update');
    end if;
end;
/
  

错误:触发SUPERHEROES_AUDIT编译错误:检查编译器日志   错误(5,5):PL / SQL:语句被忽略错误(11,11):PLS-00201:   标识符“ UPDATEING”必须声明。

1 个答案:

答案 0 :(得分:1)

尝试像这样分离触发器:

CREATE OR REPLACE TRIGGER TRG_BI_SUPERHEROES_AUDIT
   BEFORE INSERT
   ON SUPERHEROES
   FOR EACH ROW
   ENABLE
BEGIN
   INSERT INTO SH_AUDIT (NEW_NAME, OLD_NAME, USERNAME, ENTRY_DATE, OPERATION)
      VALUES (
                :NEW.SH_NAME,
                NULL,
                USER,
                TO_CHAR (SYSDATE, ' DD/MM/YYYY HH24:MI:SS'),
                'insert');
END;

CREATE OR REPLACE TRIGGER TRG_BU_SUPERHEROES_AUDIT
   BEFORE UPDATE
   ON SUPERHEROES
   FOR EACH ROW
   ENABLE
BEGIN
   INSERT INTO SH_AUDIT (NEW_NAME, OLD_NAME, USERNAME, ENTRY_DATE, OPERATION)
      VALUES (
                :NEW.SH_NAME,
                :OLD.SH_NAME,
                USER,
                TO_CHAR (SYSDATE, ' DD/MM/YYYY HH24:MI:SS'),
                'update');
END;

CREATE OR REPLACE TRIGGER TRG_BD_SUPERHEROES_AUDIT
   BEFORE DELETE
   ON SUPERHEROES
   FOR EACH ROW
   ENABLE
BEGIN
   INSERT INTO SH_AUDIT (NEW_NAME, OLD_NAME, USERNAME, ENTRY_DATE, OPERATION)
      VALUES (
                NULL,
                :OLD.SH_NAME,
                USER,
                TO_CHAR (SYSDATE, ' DD/MM/YYYY HH24:MI:SS'),
                'insert');
END;