Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-30926:Beim Zusammenführen von Tabellen kann kein stabiler Satz von Zeilen in den Quelltabellen abgerufen werden

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