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,则正确的方法将是使用复合触发器.这避免了创建单独的包来保存密钥集合 – 它可以在触发器本身完成, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |