oracle 自定義函數 返回一個表類型(轉)

oracle 自定義函數 返回一個表類型

oracle 中的函數可以返回表類型,但,這個表類型實際上是集合類型(與數組類似).這個類型不能直接作爲 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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章