Oracle PL / SQL从触发器中选择所有列:NEW

时间:2015-07-30 15:48:09

标签: oracle plsql triggers

我有一个触发器,在激活时调用存储过程,传递:NEW值作为参数。我有大约40个使用相同触发器的表,我想为每个触发器使用相同的代码。因此,我试图传递新行的所有列。我的代码在下面并显示了我尝试做的事情(但问题是:NEW.*不是有效的表达式):

CREATE OR REPLACE TRIGGER "TRIG_TEST_TRIGGER"
AFTER INSERT OR DELETE OR UPDATE ON TRIG_TEST
FOR EACH ROW
DECLARE
BEGIN

    MY_STORED_PROC('Trigger Activated: ' || :NEW.*);

END;

1 个答案:

答案 0 :(得分:1)

最有可能的是,你不能。

您可以编写一个使用动态SQL为每个表生成适当触发器代码的过程。当然,这需要您重新运行该过程以在每次表更改时重新创建触发器。

但是,我有点难以想象,my_stored_proc可能正在做什么,传递一个表示40个表中的1个每列的字符串是有意义的,可能是40个不同的集合列。如果您要写入日志表,如果您想要每列的数据,这通常意味着您希望能够随时查看特定行的演变。但是,如果您的日志表只包含来自许多不同表的各种不同格式的字符串,那么这很难做到,因为您经常需要执行诸如解析您记录的字符串之类的事情。

相关问题