怎样在sql中使用function返回的cursor

dddeee 2007-04-27 11:04:52
有一个function,定义如下:
type cur is ref cursor;
function mytest return cur
is
c cur;
begin
open c for (select * from mytable);
return c;
end;

非常简单,就是在function中返回了一个cursor。但是现在我需要在sql(注意,是普通的sql,不是pl/sql,也不是在java,c#等中使用)中使用这个cursor,打印出它的内容,这个sql怎么写?

直接使用
select * from mytest()不行,是不是需要一个什么转换函数?
...全文
445 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxfwang 2007-04-28
  • 打赏
  • 举报
回复
你可以使用Pipelined Table Functions
dddeee 2007-04-28
  • 打赏
  • 举报
回复
to DragonBill(用户中文昵称------静观其变,以静制动)

你的这段代码与我的基本上是一模一样,但是在toad中直接运行(按F9)
select mytest() from dual
在datagrid里只显示出一个单元格,里面写的是(CURSOR)

如果按F5的话,在Script Output中到是可以显示出所有数据。但是我需要的是在F9的datagrid中显示出所有数据,不然我没有办法在c1report中使用
sxfwang 2007-04-28
  • 打赏
  • 举报
回复
你等更高版本的Oracle出来吧,目前我知道的好像只有这个方法.
dddeee 2007-04-28
  • 打赏
  • 举报
回复
to sxfwang()
你所说的Pipelined Table Functions是不是先定义一个object,再定义一个table of object,然后在function中使用pipe row()?
这样的方式我会,但是它太麻烦了,因为要一旦返回的字段要修改,就要修改那个object,非常不方便,所以最后还是在考虑cursor
doer_ljy 2007-04-27
  • 打赏
  • 举报
回复
select mytest() from dual;
不知道是不是你想要的。
dddeee 2007-04-27
  • 打赏
  • 举报
回复
是的,我需要一个sql。

我是在c1report(一个报表工具)中做报表,它只能使用标准的sql从数据库中读取数据。因为逻辑有点复杂,所以我在数据库中写了一个function: get_data(...) return cursor。但是用标准的sql调用这个function,读出来的不是一行行的数据,有什么办法可以把那个cursor转换成一行行的数据
liyanmingkong 2007-04-27
  • 打赏
  • 举报
回复
不太明白你的意思,是不是你想要的是个sql语句?
DragonBill 2007-04-27
  • 打赏
  • 举报
回复
一个范例:


create package pkg_test
is
type cur is ref cursor;
end;
create or replace function mytest return pkg_test.cur
is
c pkg_test.cur;
begin
open c for select * from emp;
return c;
end;

select mytest() from dual;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧