2012-01-06 3 views
2

マージは、SQL%ROWCOUNTを使用してレコードを挿入または更新する方法に関係なく、マージされるレコードの数を常に示します。PLSQL:マージ文を使用したときに更新されたレコードの数を取得する

実際に挿入されたレコードの数と、実際に更新されたレコードの数を調べる方法。

私はこの記事からオプションを試してみましたが、これは動作していないよう - 任意の助けを

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:122741200346595110

+1

どのような「オプション」を参照していますか? Tom Kyteは、そのスレッドでは、一般に、挿入、更新、削除された行数を単一の 'MERGE'文で区別する方法がないことを明白に述べています。マージされた行の数を見つけることができます。挿入された行と更新された行とを区別する方法はいくつか提案されていますが、それらはむしろ脆弱で、異なるクエリプランでは異なる動作をします。 –

+0

私は参考にしていました - https://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:122741200346595110#125700900346637534 – jagamot

+1

OK。 Tomが指摘するように、そのアプローチは非常に脆弱で、特定の計画に依存します。マージステートメントによって挿入、更新、および削除された行の数を分割する一般的な正しい方法はありません。マージされた行の数のみを決定できます。別の数字が必要な場合は、おそらく 'INSERT'と' UPDATE'文を別々にする必要があります。 –

答えて

5

一般に、挿入、更新、および削除された行に対して別々のカウントを取得するために、MERGE文の影響を受けた行がどのように影響を受けたかを区別することはできません。

本当に別の数字が必要な場合は、別のINSERTUPDATEステートメントを発行することができますが、これは効率が低い可能性があります。特定のクエリプランに依存する非一般的な解決方法がありますが、それらはかなり脆弱で一般的に推奨されません。

関連する問題