Вы не можете использовать курсор O_RESULTS
, чтобы открыть курсор O_FILES
.
Вы можете запросить таблицу ITEMS
, чтобы открыть оба курсора, но это создает вероятность изменения некоторых данных.между открытием курсора O_RESULTS
и временем открытия курсора O_FILES
и тем, что два набора результатов не синхронизированы.
procedure get_items_with_files(
o_results out sys_refcursor,
o_files out sys_refcursor
) is
begin
begin
open o_results for
select item_id,
item_name
from items;
end;
begin
open o_files for
select item_id
item_file_name
from item_files if
where if.item_id in (select item_id from items);
end;
end get_items_with_files;
Было бы гораздо более распространенным возвратить один курсоркоторый представляет собой результат объединения двух таблиц
procedure get_items_with_files(
o_results out sys_refcursor
) is
begin
open o_results for
select item_id,
item_name,
item_file_name
from items
join item_files using (item_id);
end get_items_with_files;
Если все, что делает ваша процедура - это открытие курсора, однако, было бы более распространенным создать представление, а не создать процедуру, а затем запросить представлениевместо вызова процедуры.