gpt4 book ai didi

sql - 甲骨文 11g : Using cursors inside a procedure

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:45 25 4
gpt4 key购买 nike

我试图从过程中返回两个引用游标,但遇到了一些麻烦。我想要做的是从第一个游标中获取信息,从中选择几个字段并加入其他一些信息并将结果粘贴到表变量中......然后从该表中选择不同的项目到第二个光标。但是我无法编译它。有人可以告诉我我做错了什么吗?

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;

最佳答案

你不能使用这个结构:

for item in c_items loop

带有 REF CURSOR。它期望 c_items 是一个标准的 PL/SQL CURSOR。这是您收到错误的直接原因。如果你想循环一个 REF CURSOR,据我所知,你需要使用显式的 FETCH 语句并自己处理循环条件。

此外,您所说的您正在尝试做的事情并没有多大意义。如果您从过程主体中的 c_items 游标获取数据,同时将其返回给调用者,则会造成混淆。在您的评论中,您使用了短语“选择游标”,这意味着您可能将游标视为可以重复迭代的静态集合。事实并非如此——游标代表内存中的事件查询。一旦从游标中提取了一行,就无法再次提取它。

我不确定具体建议是什么,因为我不理解代码的最终目标。如果您确实需要处理来自 c_items 的行并将其作为可用的 REF CURSOR 返回,那么唯一的选择可能是关闭并重新打开它。

关于sql - 甲骨文 11g : Using cursors inside a procedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com