2

我怎样才能得到触发器中所有受影响的行。

在 sybase 中有一个“已删除”表,它在删除和更新语句期间存储受影响行的副本

sybase 文档

oracle 中是否有在表级触发器中执行相同操作的解决方案?

4

2 回答 2

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 中的不同,但它正是您要寻找的。

在这里您可以找到更多信息。

于 2012-11-13T14:21:37.083 回答
1

我在 Oracle 中知道的“已删除”表没有类似物。

根据您需要执行的操作,您可以使用复合触发器在受语句影响的行上完成基于集合的操作,如 Tim Hall 的oracle-base 站点中所述。使用这种方法,您可以定义累积(例如)一个值或计数的行级触发器,将其存储在触发器的全局部分,并在触发器的 AFTER INSERT|UPDATE|DELETE 部分中访问这些值。全局变量在所有触发点的整个持续时间内保持定义。

然而,当触发器变得如此复杂时,我不太喜欢基于触发器的解决方案,而是将代码放在应用程序包/过程/函数中。

于 2012-11-13T20:12:59.633 回答