sql >> データベース >  >> RDS >> Oracle

ORA-30926:表をマージするときに、ソース表で安定した行のセットを取得できません

    少しトリッキーなケースです。主な理由は、TMP_DP_REGIAO.DS_PROTHEUS_CODE列に重複があるようであり、MERGEが宛先テーブルの同じ行を数回更新しようとすることです。ただし、更新された列の新しい値と古い値が同じである場合、Oracleはこの重複の問題をスキップできます。

    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 
    

    ただし、古い値と新しい値が異なる場合、Oracleは次のような例外を発生させます。

    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. 2つの列に基づいて行を列に動的に変換するMysqlクエリ

    2. エラー:psycopg2.extensionsという名前のモジュールがありません

    3. Oracleのテーブルから重複する行を削除する

    4. PostgreSQLを使用して別のテーブルを更新するトリガーを挿入します