明示カーソルからいくつかの行を更新する PL/SQL ブロックを実行しています。カーソルを宣言するコードは次のとおりです。
cursor DUP_SUBJECTS is
select *
from ODS_SUBJECT_D
WHERE SUBJECT_COD = ANY (SELECT SUBJECT_COD
FROM ODS_SUBJECT_D
WHERE END_DATE = TO_DATE ('31-12-9999','DD-MM-YYYY')
GROUP BY SUBJECT_COD, ROW_TYPE_DE
HAVING COUNT(*) > 1)
ORDER BY SUBJECT_COD, START_DATE;
本体の最初のステートメントはDBMS_OUTPUT.PUT_LINE
、ブロックの実行を開始するタイミングを通知するためのものです。上記のスクリプトのクエリは、テーブルの 2900000 行から 20000 行を返します。スクリプトの宣言ブロックで非常に長い時間がかかるようです (30 分経ってもメッセージはまだ出力されません)。
スクリプトのパフォーマンスを最適化するための提案はありますか?
ありがとう、
アントニオ