【发布时间】:2021-04-22 23:44:03
【问题描述】:
表:
CREATE TABLE EXAMPLE1 (column1 integer, column2 integer, column3 integer);
插入:
INSERT INTO EXAMPLE1 VALUES (1,11,111);
触发器:
create or replace TRIGGER trigger_name
BEFORE UPDATE OF COLUMN1 ON EXAMPLE1
FOR EACH ROW
BEGIN
RAISE_APPLICATION_ERROR(-20000, 'You can't directly update this column.');
END;
更新:
UPDATE EXAMPLE1 SET COLUMN1 = 2 WHERE COLUMN2 = 11;
所以,当我尝试更新 column1 (column1 = 2) 触发器时,应该执行并告诉我不能直接更改该列,但是如果我执行这样的查询:
UPDATE EXAMPLE1 SET column1 = 1, column2 = 22 where column3 = 111;
我的意思是我也发送 column1 = 1(column1 等于 1),所以值没有变化,它应该更新表,因为我只更改 column2,column1 保持不变,等于 1。
【问题讨论】:
-
无论新值是什么,您仍在更新该列,在您的触发器中,您必须检查该值是否正在更改
-
@eshirvana 有没有机会给我发一个代码,我是新手:/
标签: sql database oracle plsql triggers