在有错误编译的人员表中插入或删除时将行插入日志表的触发器

时间:2012-12-07 02:34:38

标签: oracle plsql

我有一个带有名称和id的人员表,以及一个带有属性who和what的日志表。 我想在删除或插入人员表时插入日志表。

这是我到目前为止所做的:

CREATE OR REPLACE TRIGGER add_del
  BEFORE INSERT OR DELETE ON persons
  FOR EACH ROW
  BEGIN
    IF INSERTING THEN
      INSERT INTO logs (who, what) VALUES (name, 'Insert into persons');
    ELSE
      INSERT INTO logs (who, what) VALUES (name, 'Delete from persons');
    END IF;
  END;
  /

为什么这会编译错误:

警告:使用编译错误创建触发器。

1 个答案:

答案 0 :(得分:2)

由于你没有发布错误,我不得不猜测。我的猜测是问题是name在此上下文中不是有效的标识符。您需要引用:new.name:old.name。插入时:old.nameNULL,而删除时:new.nameNULL,因此我假设您需要

CREATE OR REPLACE TRIGGER add_del
  BEFORE INSERT OR DELETE ON persons
  FOR EACH ROW
BEGIN
  IF INSERTING THEN
    INSERT INTO logs (who, what) VALUES (:new.name, 'Insert into persons');
  ELSE
    INSERT INTO logs (who, what) VALUES (:old.name, 'Delete from persons');
  END IF;
END;