如何在触发器中获取所有受影响的行。
在 sybase 中有一个表"已删除",它在删除和更新语句期间存储受影响行的副本
Sybase 文档
oracle 中是否有任何解决方案可以在表级触发器中执行相同的操作?
触发器中使用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 中不同,但这就是您要找的。
在这里您可以找到更多信息。
Oracle 中,没有与我知道的"已删除"表类似的表。
根据您需要执行的操作,您可以使用复合触发器对受语句影响的行完成基于设置的操作,如 Tim Hall 的 oracle-base 站点中所述。使用此方法,您可以定义累积(例如)值或计数的行级触发器,将其存储在触发器的全局部分中,并在 AFTER INSERT|更新|删除触发器中的部分。 全局变量在所有触发点的整个持续时间内保持定义。
但是,当触发器变得如此复杂时,我不太喜欢基于触发器的解决方案,而是将代码放在应用程序包/过程/函数中。