2

Oracleデータベースにストアドプロシージャがあります。
このストアドプロシージャでは、カーソルを定義しました。

次を使用して結果セットを反復処理します。

FOR item IN cursor_name LOOP
END LOOP;

クエリは何回実行されますか?私が知る方法はありますか?また、これが最善のアプローチですか、それとも別の方法で繰り返す必要がありますか?

ありがとう。

4

1 に答える 1

5

カーソル内のクエリはcursor_name1回だけ実行されます。そのカーソルからフェッチする回数は異なります。各フェッチは、コンテキストスイッチを意味します。Oracleバージョン10以降では、パラメータPLSQL_OPTIMIZE_LEVELをデフォルトの2以上に設定すると、最適化が開始され、一度に100行がフェッチされます。これがないと、各行を個別にフェッチすることになります。これは、多くの行をフェッチするときにパフォーマンスを大幅に低下させます。

また、SQLステートメントをループ内に配置しないように注意してください。これを行うと、カーソルからフェッチされた行の数だけ、明らかにこれらのステートメントを実行します。

よろしく、
ロブ。

于 2012-07-09T09:12:03.337 に答える