Oracle 外部テーブルから多くの選択を実行する必要があります。
これによく似たカーソルが10個あります(ext_tempは外部テーブルです)
CURSOR F_CURSOR (day IN varchar,code Number,orig Number)
IS
select NVL(sum(table_4.f),0)
from ext_temp table_4
where
--couple of conditions here, irrelevant for the question at hand.
AND TO_CHAR(table_4.day,'YYYYMMDD') = day
AND table_4.CODE = code
AND table_4.ORIG = orig;
また、外部テーブルには約 22659 個のレジスタがあります。
私のスクリプトのメインループは次のようになります
for each register in some_query: --22659 registers
open F_cursor(register.day,register.code,register.orig);
--open 9 more cursors
fetch F_cursor into some_var;
--fetch 9 more cursors, with the same structure
クエリは多くのものに取って代わられています。ここから、インデックスや DML を使用できないことがわかります。
それで、それをより速く実行する方法はありますか?plsql スクリプトを書き直すことはできますが、時間が残っているとは思えません。
更新: 重要な詳細を見逃しました。
私はデータベースの所有者または DBA ではありません。その男はデータベースに余分な情報 (約 3 GB のデータ) を必要とせず、外部テーブルしか彼から得ることができませんでした。彼は私たちが一時テーブルを作成することを許可していません。彼の理由に疑問を呈するつもりはありませんが、外部テーブルはこれに対する解決策ではありません。だから、私たちはそれらにこだわっています。