我正在开发一个小型图书馆数据库,我不想让某人更新某人的ID。但我需要使用AFTER UPDATE和FOR EACH STATEMENT(我告诉他们是Oracle默认的)。因此,基本上,如果有人更新了客户信息并更改了他/她的ID或错误输入,则触发器会自动将其再次更新为旧值。问题是Oracle在使用FOR EACH STATEMENT时不会让我使用:NEW和:OLD。这个问题有没有解决方法?
CREATE OR REPLACE TRIGGER alter_id_trigger
AFTER UPDATE ON CUSTOMER
BEGIN
UPDATE CUSTOMER SET ID = :OLD.ID
WHERE ID = :NEW.ID;
END;
谢谢!
答案 0 :(得分:4)
使用以下代码进行触发。 已完成的更改:
将ID的值设置为之前的值。 (永远不会修改ID字段)
CREATE OR REPLACE TRIGGER ALTER_ID_TRIGGER
BEFORE UPDATE ON CUSTOMER
BEGIN
SET :NEW.ID = :OLD.ID
END;
注意:使用 BEFORE UPDATE:
答案 1 :(得分:2)
我认为您需要之前的更新触发器:
CREATE OR REPLACE TRIGGER alter_id_trigger
BEFORE UPDATE ON CUSTOMER
BEGIN
SET :NEW.ID = :OLD.ID
END;
您可以测试以查看值是否正在更改,但这似乎是不必要的。