FROM句のサブクエリは、tableAのすべてのレコード(の検査)に対して1回または繰り返し実行されますか?
select tA.*
from tableA tA,
(select myGetSingleIdFunction('asdfaf') id from dual) tB
where tA.id = tB.id;
この記事を読む: TomKyteによるSQLのキャッシュと伝道について
これが答えです:
select tA.*
from tableA tA
where tA.id = (select myGetSingleIdFunction('asdfaf') from dual);
クエリプランナーが十分であれば、どちらでもありません。サブクエリで定数値を使用していることを認識し、テーブルdual
を使用して、からの結果を何回tableA
繰り返すかを決定します。
基本的に、クエリを次のように変換します。
select tA.*
from tableA tA
cross join dual
where tA.id = myGetSingleIdFunction('asdfaf')
一度。興味がある場合は、データベースカーソルを検索できます。データベースカーソルは、心配している方法でコレクションをさらに反復処理します。