加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:36:34 所属栏目:MsSql教程 来源:网络整理
导读:在Oracle中,您可以通过在CREATE TRIGGER语句中指定FOR EACH ROW子句来编写行级触发器: CREATE TRIGGER MY_FANCY_TRIGGER BEFORE UPDATE ON MY_TABLE FOR EACH ROWBEGIN IF :OLD.my_id_column 4 AND :NEW.some_other_column 'foo' THEN -- ... END IF;END; 这
在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,则正确的方法将是使用复合触发器.这避免了创建单独的包来保存密钥集合 – 它可以在触发器本身完成,

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读