У меня есть составной триггер, использующий предложение when. Мое предложение when работает, как и ожидалось, для оператора AFTER EACH ROW, но не для следующего AFTER STATEMENT. Если предложение WHEN не выполнено, AFTER EACH ROW не выполняется, но оператор AFTER остается. Есть ли способ убедиться, что предложение WHEN работает для всего триггера?
Я попытался обойти, просто добавив предложение WHEN в качестве оператора IF в AFTER STATEMENT, но у меня были проблемы с переменными 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;