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);