问题描述
我有下面的代码,其中函数 ReturnSysRef 返回 SYS_REFCURSOR,该函数将 sql 文本保存在一个变量中,然后打开该变量的 SYS_REFCURSOR 并返回它。函数 MyFunc 是一个流水线函数,它调用 ReturnSysRef 循环遍历记录,然后返回明确定义的记录。问题是当我尝试调用流水线函数时,我只能返回列标题而不是数据。
CREATE OR REPLACE PACKAGE MyPackage IS
type MyRecords is record
(
Col1 varchar2,Col2 varchar2,Col3 varchar2
);
type MyList is table of MyRecord;
function MyFunc return MyList pipelined;
function ReturnSysRef return SYS_REFCURSOR;
END;
/
CREATE OR REPLACE package body MyPackage is
function MyFunc return MyList pipelined is
l_row MyRecord;
l_ref SYS_REFCURSOR;
begin
l_ref:=ReturnSysRef;
LOOP
FETCH l_ref
INTO l_row.col1,l_row.col2,l_row.col3;;
EXIT WHEN l_ref%NOTFOUND;
pipe row(l_row);
END LOOP;
CLOSE l_ref;
<<Proc_Exit>>
return;
Exception
When others then
return;
end MyFunc;
function ReturnSysRef return SYS_REFCURSOR is
l_sqlqry varchar2(50);
l_ref SYS_REFCURSOR;
begin
l_sqlqry:='select ''val1'' as col1,''val2'' as col2,''val3'' as col3 from dual;';
open l_ref for
l_sqlqry;
return l_ref;
end ReturnSysRef;
end;
/
当我执行下面的查询时,它不返回任何数据,而我希望它返回“val1、val2、val3”。
select * From table(mypackage.Myfunc);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)