1. ホーム
  2. Database

ORA-30926: ソース・テーブルの安定した行のセットを取得できませんか?

2022-02-13 02:36:08

<スパン 取得元:http://blog.itpub.net/29900383/viewspace-1284128/

<スパン みんなに見てもらうために。 http://blog.sina.com.cn/s/blog_5d25646e0100qu17.html的内容、追加します。

test_source と test_target の2つのテーブルを新規に作成し、そのデータは以下のようになります。 <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン <スパン
SQL> select * from test_source;
ネームID
<スパン ---------- ----------

<スパン P3 74834
<スパン P4 74835
<スパン ルオエイト
<スパン P1 74832
<スパン P2 74833
ジーエイト
<スパン SQL> select name ,id from test_target;
ネームID
<スパン ---------- ----------
<スパン P3*** 74834
<スパン P4*** 74835
ルオ** 8
<スパン P1*** 74832
<スパン P2*** 74833
zhi** 8
SQL> test_target にマージする。
  2 test_sourceを使用する
  3 on (test_source.id = test_target.id)
  4 マッチしたら更新 set test_target.name = test_source.name
  5 一致しない場合、insert values(test_source.name,test_source.id) を挿入する。
 test_sourceを使用する
       *
2行目でエラーになりました。
ORA-30926: ソース・テーブルの安定した行のセットを取得できません。

---------------------- ははは、エラーが報告されました、なぜか考えてみてください。-----------------------------
---------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------
解答は以下の通りです。
まず、存在にマージするポイントが何であるかを知る必要があります!!!
      使用方法 にマージする。 は、on(条件)にマッチした条件に基づいて、table_target のデータを table_source のデータに更新してマージすることである。
merge intoの内部処理として テーブル_ソース table_sourceのマッチングカラムに重複する値がある場合、重複するカラムの値を2回目にマッチングすると、最初の更新後の値が再度更新されることになる。 つまり、table_sourceのレコードはマージ後のtable_targetで失われることになる もしレコードが失われるなら、2つのテーブルをマージする意味はあるのだろうか?したがって、我々はに注意を払うためにマージ使用:ソーステーブルのマッチング列は、重複する値を持つことはできません、それ以外の場合は、(エラー!)一致することはできません。  
------------------------------------------------------------------------------ 上記の重複したカラムの値を削除してみます。
                SQL> delete from test_source where name = 'zhi';

1行削除しました。
SQL> merge into test_target
  2 test_sourceを使用する
  3 on (test_source.id = test_target.id)
  4 マッチしたら更新 set test_target.name = test_source.name
  5 一致しない場合、insert values(test_source.name,test_source.id) を挿入する。
6 行がマージされます。
--------------- 今回のHOマージは成功しました。