我正在开发一个将返回两个游标的包。一个光标是带有数字主键的项目列表。另一个光标是与项目相关联的文件列表
到目前为止代码:
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 TABLE(CAST(o_results)));
end;
end get_items_with_files;
我遇到的问题包括:
答案 0 :(得分:0)
您无法使用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;
但是,如果所有过程都在打开游标,那么创建视图而不是创建过程然后查询视图而不是调用过程会更常见。