gpt4 book ai didi

sql - 从返回引用游标记录的函数中获取

转载 作者:行者123 更新时间:2023-12-04 18:25:38 24 4
gpt4 key购买 nike

我在一个包中有一个函数,它将一个 REF CURSOR 返回到一个记录。我正在尝试从代码块中调用此函数。调用代码如下所示:

declare      
a_record package_name.record_name;
cursor c_symbols is select package_name.function_name('argument') from dual;

begin
open c_symbols;
loop
fetch c_symbols into a_record;
exit when c_symbols%notfound;
end loop;
close c_symbols;
end;

作为 package_name 一部分的函数声明如下所示:
TYPE record_name IS RECORD(
field_a varchar2(20);
);

TYPE record_cursor IS REF CURSOR RETURN record_name;

FUNCTION getsymbols(argument IN varchar2) return record_cursor;

当我尝试运行调用代码块时,出现异常:PLS-00386: type mismatch found at 'EXAMPLE_SYMBOLS' between FETCH cursor and INTO variables。

a_record 的类型应该是什么,我如何访问我正在获取的记录的各个元素(类型为 record_name)?

最佳答案

我怀疑您认为您的游标应该从 REFCURSOR 中获取行。它不是。 REFCURSOR 本身就是一个游标,您不需要使用另一个游标从中进行选择。

您当前的游标正在做的是获取包含函数调用结果的单行、单列。这是 record_cursor不是 record_name ,所以你得到一个类型不匹配。

我怀疑你真正想做的是这样的:

declare
symbol_cursor package_name.record_cursor;
symbol_record package_name.record_name;
begin
symbol_cursor := package_name.function_name('argument');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;

-- Do something with each record here, e.g.:
dbms_output.put_line( symbol_record.field_a );

end loop;

CLOSE symbol_cursor;

end;

关于sql - 从返回引用游标记录的函数中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1106555/

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