oracle 中的函数可以返回表类型
但,这个表类型实际上是集合类型(与数组类似)
这个类型不能直接作为 from 的宾语
从oracle 9i 开始,提供了一个叫做“管道化表函数”的概念,来解决这个问题
这种类型的函数,必须返回一个集合类型,且标明 pipelined
这个函数不能返回具体变量,必须以一个空 return 返回
这个函数中,通过 pipe row () 语句来送出要返回的表中的每一行
调用这个函数的时候,通过 table() 关键字把管道流仿真为一个数据集
但,这个表类型实际上是集合类型(与数组类似)
这个类型不能直接作为 from 的宾语
从oracle 9i 开始,提供了一个叫做“管道化表函数”的概念,来解决这个问题
这种类型的函数,必须返回一个集合类型,且标明 pipelined
这个函数不能返回具体变量,必须以一个空 return 返回
这个函数中,通过 pipe row () 语句来送出要返回的表中的每一行
调用这个函数的时候,通过 table() 关键字把管道流仿真为一个数据集
以下是一个十分简单的实例:
create table tb1(k number, v varchar2(10));
insert into tb1(k, v) values(100,'aaa');
insert into tb1(k, v) values(200,'bbb');
insert into tb1(k, v) values(200,'ccc');
select * from tb1;
create type row_type1 as object(k number, v varchar2(10));
create type table_type1 as table of row_type1;
create or replace function fun1 return table_type1 pipelined as
v row_type1;
begin
for myrow in (select k, v from tb1) loop
v := row_type1(myrow.k, myrow.v);
pipe row (v);
end loop;
return;
end;
select * from table(fun1);