通常は、2つのテーブルを結合するだけです。
FOR some_cursor IN (SELECT s.col1,
s.col2
FROM sometable s
JOIN temp_table t ON (s.col3 = t.col1))
LOOP
<<do something>>
END LOOP
ただし、効率が心配なので
-
TEMP_TABLE
ですか 本当に一時的なテーブル?もしそうなら、なぜですか? Oracleが実際に一時テーブルを使用する必要があることは非常にまれであるため、そもそも一時テーブルにデータを入力するのに非効率的なことをしているのではないかと思われます。 - カーソルが
FOR
なのはなぜですかTEMP_TABLE
からのデータを処理するためのループ ?行ごとの処理はPL/SQLで何かを行うのに最も遅い方法であるため、効率が心配な場合は一般的に回避されます。パフォーマンスの観点から、一連の単一行のINSERT
を実行するループを実行するのではなく、SQLを最大化する必要があります。 またはUPDATE
操作では、単一のINSERT
を実行します またはUPDATE
行のセット全体を変更しました。データをチャンクで処理する必要がある場合は、PL / SQLコレクションと一括処理が役立ちますが、ストレートSQLほど効率的ではありません。 - なぜ
DISTINCT
があるのですかTEMP_TABLE
に対するクエリで ?big_id
が重複することを本当に期待していますか 間違っていない値?ほとんどの場合、人々はDISTINCT
を使用します データが正しく結合されていない問題をカバーするため、または将来、制約が自分自身を保護するためのより適切な方法であるときに誤ったデータが作成された場合に備えて、Oracleに高価な並べ替えを強制する場合のいずれか。 >