我有一个使用when子句的复合触发器。我的when子句对AFTER EACH ROW语句可按预期工作,但对以下AFTER STATEMENT不起作用。如果未满足WHEN子句,则AFTER EACH ROW未运行,但AFTER语句仍在运行。有没有办法确保WHEN子句对整个触发器有效?
我通过在AFTER STATEMENT中仅将WHEN子句添加为IF语句来进行变通,但是Bind变量和ORA 03113错误出现问题。示例代码如下:
FOR UPDATE OF COL_X ON MY_TABLE
WHEN (nvl(new.var,'*') != '*')
COMPOUND TRIGGER
type t_table is table of TABLE.VAR%TYPE;
l_table t_table := t_table();
AFTER EACH ROW IS
BEGIN
l_table.extend();
l_table(l_table.last) := :new.var;
END AFTER EACH ROW;
--The following OUTPUT is displayed even if WHEN is not me--
after statement is
begin
dbms_output.put_line('OUTPUT');
for i in l_table.first .. l_table.last
loop
dbms_output.put_line('Run if Data in l_table');
end loop;
l_table.delete
end after statement
end;
没有办法解决;之前和之后的语句触发器将始终触发。 WHEN条件引用列(然后仅在更新时)。特定列在语句级别不可用。