Es ist ein etwas kniffliger Fall. Der Hauptgrund ist, dass Sie anscheinend Duplikate in der Spalte TMP_DP_REGIAO.DS_PROTHEUS_CODE haben und MERGE versucht, dieselbe Zeile der Zieltabelle mehrmals zu aktualisieren. Aber wenn neue Werte und alte Werte in aktualisierten Spalten gleich sind, kann Oracle dieses Problem von Duplikaten überspringen:
SQL> select * from t;
CODE TEXT
---------- ----------
1 test
SQL> merge into t using (
2 select 1 code,'test' text from dual union all
3 select 1 code,'test' text from dual
4 ) s
5 on (t.code = s.code)
6 when matched then
7 update set t.text = s.text
8 /
2 rows merged
Aber wenn alte und neue Werte unterschiedlich sind, löst Oracle die Ausnahme aus, die Sie erhalten:
SQL> merge into t using (
2 select 1 code,'a' text from dual union all
3 select 1 code,'a' text from dual
4 ) s
5 on (t.code = s.code)
6 when matched then
7 update set t.text = s.text
8 /
merge into t using (
*
error in line 1:
ORA-30926: unable to get a stable set of rows in the source tables