在语句中忽略语句后的Oracle复合触发器

问题描述 投票:1回答:1

我有一个使用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;
oracle plsql database-trigger bind-variables
1个回答
0
投票

没有办法解决;之前和之后的语句触发器将始终触发。 WHEN条件引用列(然后仅在更新时)。特定列在语句级别不可用。

© www.soinside.com 2019 - 2024. All rights reserved.