我怎样才能得到触发器中所有受影响的行。
在 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|UPDATE|DELETE 部分中访问这些值。全局变量在所有触发点的整个持续时间内保持定义。
然而,当触发器变得如此复杂时,我不太喜欢基于触发器的解决方案,而是将代码放在应用程序包/过程/函数中。