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



我有一个带有名称和ID的人员表,以及一个带有属性谁和什么的日志表。我想在删除或插入人员表时插入到日志表中。

这是我到目前为止所拥有的:

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;
  /

为什么编译时会出现错误:

警告:触发器创建时出现编译错误。

既然你没有发布错误,我不得不猜测。 我的猜测是,问题在于在这种情况下name不是有效的标识符。 您需要引用 :new.name:old.name:old.name将在插入NULL,而:new.name将在删除时NULL,所以我假设您想要类似的东西

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;

最新更新