nee*_*esh 4 sql oracle plsql oracle10g
我在一个包中有一个函数,它将REF CURSOR返回给RECORD.我试图从代码块调用此函数.调用代码如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
作为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;
Run Code Online (Sandbox Code Playgroud)
当我尝试运行调用代码块时,我得到异常:PLS-00386:在FETCH游标和INTO变量之间的'EXAMPLE_SYMBOLS'处找到类型不匹配.
a_record的类型应该是什么以及如何访问我正在获取的记录的各个元素(类型为record_name)?
我怀疑你认为你的光标应该是从REFCURSOR获取行.不是.REFCURSOR本身就是一个游标,你不使用另一个游标来从中进行选择.
当前游标正在执行的操作是获取包含函数调用结果的单个行.哪个record_cursor不是a 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14170 次 |
| 最近记录: |