【发布时间】:2010-11-28 03:26:37
【问题描述】:
在 oracle 中,我可以指定应该触发触发器的列:
create or replace trigger my_trigger
before update of col1, col2, col3 on my_table for each row
begin
// the trigger code will be executed only if col1 or col2 or col3 was updated
end;
现在我想做以下事情:我不希望触发器在只有一个列被更新时触发。这怎么可能?
我可以列出除一个之外的所有列,这不应该引发触发器的触发。这对于有很多列的表来说是相当麻烦的。
另一种方法是像这样使用 UPDATING 函数:
if not updating('COL3') then ...
但如果我同时更改 COL1 和 COL3,则该语句的计算结果为 false。这不是我想要的,因为我想在 只有一个 列 (COL3) 被更新时限制执行。
【问题讨论】:
-
使用数据字典列出所有列不那么麻烦。
SELECT column_name FROM user_tab_columns WHERE table_name = 'MY_TABLE' AND column_name != 'COL3'; -
确实如此,但需要其他人来维护触发器。如果我们要添加一个新列或重命名它……我已经能听到他大声喊叫了。我想找到一个可靠的方法,对他,尤其是对我来说,痛苦更少。 ;-)