Я думаю, что Oracle попытается кешировать результаты вашего tbl_keys
подзапроса, поэтому, если он возвращает небольшое количество строк, ваши запросы, вероятно, будут в порядке, как они.
Я не знаю, лучше ли , но если у вас проблемы с производительностью, вы можете попробовать альтернативный метод - присоединиться к таблицам, например,
open curr1 for
select t.*
from table1 t
join tbl_keys k
on k.key_field = t.key_field
and k.type = 1;
может повысить производительность, если ваша таблица tbl_keys очень большая.
Лично я предпочитаю использовать неявные циклы курсора всякий раз, когда это возможно - они просты и могут быть очень быстрыми - но я не знаю, сработает ли это для вашей процедуры, поскольку вы не показали остальную часть этого *. 1015 *
for r in (select t.*
from table1 t
join tbl_keys k
on k.key_field = t.key_field
and k.type = 1)
loop
-- output the row somehow
end loop;
for r in (select t.*
from table2 t
join tbl_keys k
on k.key_field = t.key_field
and k.type = 1)
loop
-- output the row somehow
end loop;
...etc