【发布时间】:2012-03-19 12:30:06
【问题描述】:
我试图从一个过程中返回两个引用游标并且遇到了一些麻烦。我要做的是从第一个光标中获取信息,从中选择一些字段并加入其他一些信息并将结果粘贴到表变量中......然后从该表中选择不同的项目到第二个光标。但我无法编译它。有人可以告诉我我做错了什么吗?
type T_CURSOR is REF CURSOR
procedure FetchSL3Details_PRC
(
c_items out T_CURSOR,
c_identifiers out T_CURSOR,
p_niin in char
) as
v_idents IDENTIFIER_TABLE_TYPE:= IDENTIFIER_TABLE_TYPE();
BEGIN
open c_items for
select
its.item_set_id,
its.niin,
its.parent_niin,
its.commodity_id,
its.service_type,
its.sl3_type,
its.qty,
its.created_id,
its.created_dt,
its.modified_id,
its.modified_dt
from
item_set its
start with its.niin = p_niin
connect by prior its.niin = its.parent_niin;
for item in c_items loop
v_idents.extend;
v_idents(v_idents.LAST) := identifier_row_type(item.commodity_id,
get_group_name_fun(item.commodity_id),
0);
v_idents.extend;
v_idents(v_idents.LAST) := identifier_row_type(item.created_id,
get_formatted_name_fun(item.created_id),
0);
v_idents.extend;
v_idents(v_idents.LAST) := identifier_row_type(item.modified_id,
get_formatted_name_fun(item.modified_id),
0);
end loop;
open c_identifiers for
select
distinct(v.id),
v.name,
v.type
from
v_idents v;
END FetchSL3Details_PRC;
【问题讨论】:
-
什么是 T_CURSOR?我一般使用 sys_refcursor 作为保持打开游标的变量类型。
-
T_CURSOR 是引用光标的 typedef...
-
for 循环开头的错误是 (506,19) “C_ITEMS 不是过程或未定义”。我可以选择光标,但我不能为 for 循环重新打开它。它还抱怨 v_idents 表不存在...