程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle自定義函數的使用

oracle自定義函數的使用

編輯:Oracle數據庫基礎

Oracle自定義函數是最重要的函數之一,下面就為您介紹Oracle自定義函數的使用,實現返回表類型,希望對您能夠有所幫助。

Oracle中的函數可以返回表類型。但是,這個表類型實際上是集合類型(與數組類似)這個類型不能直接作為 from 的賓語。
 
從Oracle 9i 開始,提供了一個叫做“管道化表函數”的概念,來解決這個問題。
這種類型的函數,必須返回一個集合類型,且標明 pipelined。
這個函數不能返回具體變量,必須以一個空 return 返回。
這個函數中,通過 pipe row () 語句來送出要返回的表中的每一行。
 
調用這個函數的時候,通過 table() 關鍵字把管道流仿真為一個數據集
以下是一個十分簡單的實例:

  1. create table tb1(k number, v varchar2(10));  
  2.  
  3. insert into tb1(k, v) values(100,'aaa');  
  4. insert into tb1(k, v) values(200,'bbb');  
  5. insert into tb1(k, v) values(200,'ccc');  
  6.  
  7. select * from tb1;  
  8.  
  9. create type row_type1 as object(k number, v varchar2(10));  
  10.  
  11. create type table_type1 as table of row_type1;  
  12.  
  13. create or replace function fun1 return table_type1 pipelined as  
  14. v row_type1;  
  15. begin  
  16. for myrow in (select k, v from tb1) loop  
  17.   v :row_type1(myrow.k, myrow.v);  
  18.   pipe row (v);  
  19. end loop;  
  20. return;  
  21. end;  
  22.  
  23. select * from table(fun1);  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved