如何在触发器中获取所有受影响的行。
在sybase中有一个“已删除”表,用于在删除和更新语句期间存储受影响行的副本
oracle中是否有任何解决方案在表级触发器中执行相同的操作?
答案 0 :(得分:1)
您可以在触发器中使用new
和old
值:
CREATE OR REPLACE TRIGGER trigger_name
BEFORE DELETE OR UPDATE ON table_name
FOR EACH ROW
BEGIN
dbms_output.put('Old: ' || :old.column);
dbms_output.put('New: ' || :new.column);
END;
/
这与sybase不同,但它正是你在寻找什么。
Here您可以找到更多信息。
答案 1 :(得分:1)
与Oracle中我所知道的“已删除”表格没有类似之处。
根据您需要执行的操作,您可以使用compound trigger在受语句影响的行上完成基于集合的操作,如Tim Hall的oracle-base site中所述。使用此方法,您可以定义累积(例如)值或计数的行级触发器,将其存储在触发器的全局部分中,并在触发器的AFTER INSERT | UPDATE | DELETE部分中访问这些值。全局变量在所有触发点的整个持续时间内保持定义。
然而,当触发器变得复杂时,我不再喜欢基于触发器的解决方案而不是将代码放在应用程序包/过程/函数中。