sql – 在表上实现语句级触发器时,是否可以获取所有受影响行的OLD和NEW记录?

前端之家收集整理的这篇文章主要介绍了sql – 在表上实现语句级触发器时,是否可以获取所有受影响行的OLD和NEW记录?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Oracle中,您可以通过在CREATE TRIGGER语句中指定FOR EACH ROW子句来编写行级触发器:
CREATE TRIGGER MY_FANCY_TRIGGER
  BEFORE UPDATE ON MY_TABLE
  FOR EACH ROW
BEGIN
  IF :OLD.my_id_column > 4 AND :NEW.some_other_column <> 'foo' THEN
    -- ...
  END IF;
END;

这样的触发器允许您查看每个受影响行的前后版本(分别为:OLD和:NEW).例如,以下语句将导致此触发器对MY_TABLE中的每一行执行一次:

UPDATE MY_TABLE SET some_other_column = 'bar';

通过消除FOR EACH ROW子句,触发器将成为一个语句级触发器.这意味着它只对每个语句执行一次,而不管该语句受到多少行(如果有)).不幸的是,语句级触发器没有:OLD和:NEW变量可用(因为受影响的行数量有所不同).

是否可以获得以下内容:OLD和:NEW语句级触发器中所有受影响行的值?我有一些处理,我宁愿只发生一次声明.

解决方法

一种方法是由Justin Cave提出的方法,将信息存储在单独的包集合中的行级触发器中.

如果您使用11g,则正确的方法将是使用复合触发器.这避免了创建单独的包来保存密钥集合 – 它可以在触发器本身完成,

猜你在找的MsSQL相关文章