Replicated with this smaller example
SQL> drop table t purge;
Table dropped.
SQL> create table t ( x ,y ) as select 1,1 from dual;
Table created.
SQL> alter session set Plsql_Warnings = 'Error:All';
Session altered.
SQL> create or replace trigger trg
2 for update or insert on t
3 compound trigger
4 type nlist is table of number;
5
6 x1 nlist;
7 y1 nlist;
8
9 before statement is
10 begin
11 select x,y
12 bulk collect into x1,y1
13 from t;
14 end before statement;
15
16 end;
17 /
Trigger created.
SQL> update t set x = x + 1;
1 row updated.
SQL> insert into t values (2,2);
1 row created.
SQL> insert into t
2 select rownum, rownum
3 from dual connect by level <= 5;
5 rows created.
SQL> merge into t
2 using (select 2 new_x,2 new_y from dual) m
3 on (t.x = m.new_x)
4 when matched then update set t.y = m.new_y
5 when not matched then insert (x,y) values (m.new_x,m.new_y) ;
merge into t
*
ERROR at line 1:
ORA-04091: table SCOTT.T is mutating, trigger/function may not see it
ORA-06512: at "SCOTT.TRG", line 9
ORA-04088: error during execution of trigger 'SCOTT.TRG'
You probably want to log a support call for this one.