sql >> Database teknologi >  >> RDS >> Oracle

ORA-30926:kan ikke få et stabilt sæt rækker i kildetabellerne, når tabeller flettes

Det er en lidt tricky sag. Den primære årsag er, at du ser ud til at have dubletter i kolonnen TMP_DP_REGIAO.DS_PROTHEUS_CODE, og MERGE forsøger at opdatere den samme række af destinationstabel flere gange. Men hvis nye værdier og gamle værdier i opdaterede kolonner er de samme, kan Oracle springe over dette problem med dubletter:

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 

Men hvis gamle og nye værdier er forskellige, rejser Oracle undtagelsen, du får:

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. Refaktorer en PL/pgSQL-funktion for at returnere output fra forskellige SELECT-forespørgsler

  2. Returner rækker, der indeholder ikke-alfanumeriske tegn i SQL Server

  3. Database backup kryptering - bedste praksis

  4. Udfyld JFreechart TimeSeriesCollection fra Mysql DB?