我有一个带有名称和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;