Oracleデータベースにストアドプロシージャがあります。
このストアドプロシージャでは、カーソルを定義しました。
次を使用して結果セットを反復処理します。
FOR item IN cursor_name LOOP
END LOOP;
クエリは何回実行されますか?私が知る方法はありますか?また、これが最善のアプローチですか、それとも別の方法で繰り返す必要がありますか?
ありがとう。
Oracleデータベースにストアドプロシージャがあります。
このストアドプロシージャでは、カーソルを定義しました。
次を使用して結果セットを反復処理します。
FOR item IN cursor_name LOOP
END LOOP;
クエリは何回実行されますか?私が知る方法はありますか?また、これが最善のアプローチですか、それとも別の方法で繰り返す必要がありますか?
ありがとう。
カーソル内のクエリはcursor_name
1回だけ実行されます。そのカーソルからフェッチする回数は異なります。各フェッチは、コンテキストスイッチを意味します。Oracleバージョン10以降では、パラメータPLSQL_OPTIMIZE_LEVELをデフォルトの2以上に設定すると、最適化が開始され、一度に100行がフェッチされます。これがないと、各行を個別にフェッチすることになります。これは、多くの行をフェッチするときにパフォーマンスを大幅に低下させます。
また、SQLステートメントをループ内に配置しないように注意してください。これを行うと、カーソルからフェッチされた行の数だけ、明らかにこれらのステートメントを実行します。
よろしく、
ロブ。