1

複数のテーブルを結合した後に col1 をフェッチするクエリがあるとします。その col1 の値をリモート db にあるテーブルに挿入したい、つまり dblink を使用してそれを行います。

col1 が 4 ~ 5 の異なるデータベースから取得されるようになりました。db1 からの value1 フェッチが db2 でも同様になる可能性があります。重複を避けるにはどうすればよいですか?

私のリモートデータベースでは、主キーとして col1 を作成しました。そのため、挿入時に重複キーがあるとエラーがスローされ、最終結果は残りのプロセスに失敗します。私はしたくない。私は2つのアプローチについて考えていました

  1. PLSQLスクリプトを作成し、各値について、値がすでに存在するかどうかを判断します。そうでない場合は挿入します。
  2. PLSQL スクリプトを作成し、重複キー例外を挿入してキャッチします。例外は無視され、挿入され続けます (あまり良く聞こえません)。

あなたはどちらのアプローチを好みますか?他にできることはありますか?

4

3 に答える 3

2

MERGE ステートメントと WHEN NOT MATCHED THEN INSERT を使用します。

同じマージも更新できますが、更新する必要はありません。更新部分を省略してください。

于 2013-03-28T19:30:15.907 に答える
1

異なるデータベースで主キーが重複している可能性がありますが、それはレコードが重複していることを意味しません。実際のデータは、それぞれのケースで異なる場合があります。または、レコードは同じ現実世界のものを表しているかもしれませんが、ステータスが異なります。わかりません。十分な説明が提供されていません。

要点は、重複レコードが存在する理由をさらに分析し、おそらく衝突を処理するためのより洗練されたアプローチが必要だということです。すべてのレコードを取得する必要がありますか (その場合、合成キーが必要です)? それとも、インスタンスを 1 つだけ使用しますか (優先順位はどのように決定しますか)。他のシナリオが存在する可能性があります。

いずれにせよ、MERGE または PL/SQL ループは、ソリューションとしては粗雑すぎる可能性があります。

于 2013-03-29T00:53:59.193 に答える