sql >> Databáze >  >> RDS >> Oracle

ORA-30926:při slučování tabulek nelze získat stabilní sadu řádků ve zdrojových tabulkách

Je to trochu ošemetný případ. Primárním důvodem je, že se zdá, že máte duplikáty ve sloupci TMP_DP_REGIAO.DS_PROTHEUS_CODE a MERGE se několikrát pokouší aktualizovat stejný řádek cílové tabulky. Ale pokud jsou nové hodnoty a staré hodnoty v aktualizovaných sloupcích stejné, Oracle může tento problém s duplikáty přeskočit:

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 

Ale pokud se staré a nové hodnoty liší, Oracle vyvolá výjimku, kterou dostanete:

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 


  1. Obnova záloh PostgreSQL a TimescaleDB pomocí ClusterControl CLI

  2. Perl DBI - spusťte SQL skript s více příkazy

  3. Připojení nelze přetypovat na oracle.jdbc.OracleConnection

  4. Nemohu získat svůj přihlašovací formulář pro správné připojení k databázi mySQL