【发布时间】:2015-05-13 03:52:51
【问题描述】:
我正在尝试使用触发器将一条记录插入到与另一个表中更改的记录相同的表中。
我还需要插入操作是插入、更新还是删除
CREATE OR REPLACE TRIGGER triggername
AFTER INSERT OR UPDATE OR DELETE
ON tablename
DECLARE
operation_type VARCHAR2;
changed_id VARCHAR2;
BEGIN
IF UPDATING
THEN operation_type := 'Update';
ELSE IF INSERTING
THEN operation_type := 'Insert';
ELSE IF DELETING
THEN operation_type := 'Delete';
END IF;
SELECT id
FROM tablename
WHERE :OLD.record1 != :NEW.record1
OR :OLD.record2 != :NEW.record2
OR :OLD.record3 != :NEW.record3
OR :OLD.record4 != :NEW.record4
OR :OLD.record5 != :NEW.record5
OR :OLD.record6 != :NEW.record6;
INTO changed_id;
INSERT INTO trigger_table.id VALUES(changed_id);
INSERT INTO trigger_table.type VALUES(operation_type);
END;
/
我遇到了一个错误
对于每个 :NEW 或 :老
如上所示
【问题讨论】:
-
您只能在 ROW LEVEL TRIGGER 中引用
:OLD和:NEW值。您必须使用FOR EACH ROW。 -
触发器不支持测试整条记录的语法,需要逐列测试。
-
查看this similar SO question关于审计触发器的答案。
标签: oracle plsql triggers bind-variables