自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

oracle函數(shù)返回表的實現(xiàn)

數(shù)據(jù)庫 Oracle
在oracle數(shù)據(jù)庫中,使用管道化表函數(shù),就可以實現(xiàn)返回表,下面就為您詳細介紹該方法的實現(xiàn)過程,供您參考學習。

如果要通過oracle函數(shù)實現(xiàn)返回表,應該如何實現(xiàn)呢?下面就教您一個oracle函數(shù)返回表的實現(xiàn)方法,供您參考,希望對您學習oracle函數(shù)能有所幫助。

包里面用一個存儲過程,返回游標,就可以了

>包的定義
1) 包頭

  1. create or replace package mypk  
  2. as  
  3. type t_cursor is ref cursor;  
  4. procedure proc(name varchar2,c out t_cursor,a number);  
  5. end; 

2) 包體

  1. create or replace package body mypk  
  2. as  
  3. procedure proc(name varchar2,c out t_cursor,a number)  
  4. as   
  5. begin  
  6. open c for select * from test where id=a and namename=name;  
  7. end proc;  
  8. end;  

這個方案的局限性太大,無法實現(xiàn)select * from function()的要求

從oracle 9i 開始,提供了一個叫做“管道化表函數(shù)”的概念,來解決這個問題
這種類型的函數(shù),必須返回一個集合類型,且標明 pipelined
這個oracle函數(shù)不能返回具體變量,必須以一個空 return 返回
這個oracle函數(shù)中,通過 pipe row () 語句來送出要返回的表中的每一行

調用這個oracle函數(shù)的時候,通過 table() 關鍵字把管道流仿真為一個數(shù)據(jù)集

以下是一個十分簡單的實例:

  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. :row_type1(myrow.k, myrow.v);  
  18. pipe row (v);  
  19. end loop;  
  20. return;  
  21. end;  
  22.  
  23. select * from table(fun1);  
  24.  

如果oracle函數(shù)帶參數(shù),可以寫法如下:

  1. create or replace function fun1(i_v Int) return table_type1 pipelined as  
  2. v1 row_type1;  
  3. begin  
  4. for myrow in (select k, v from tb1 Where k = i_v) loop  
  5. v1 :row_type1(myrow.k, myrow.v);  
  6. pipe row (v1);  
  7. end loop;  
  8. return;  
  9. end;  
  10.  
  11. select * from table(fun1(100));  

這個方案基本可以實現(xiàn)返回表的要求,但是需要注意的是,過多的集合對象的申請不利于管理。
 
 

 

 

【編輯推薦】

帶您了解Oracle FBI索引

詳解Windows下卸載Oracle數(shù)據(jù)庫

詳解如何將Oracle安裝為Linux服務

詳解Oracle多種表連接方式

oracle中使用SQL遞歸語句的例子

責任編輯:段燃 來源: 互聯(lián)網
相關推薦

2010-09-06 16:52:17

SQL函數(shù)

2010-04-14 15:09:49

Oracle函數(shù)

2010-11-16 11:32:54

ORACLE增加表空間

2010-10-25 11:39:16

oracle函數(shù)

2010-10-27 14:41:45

Oracle查詢用戶表

2010-11-16 14:53:02

Oracle游標表達式

2009-10-28 16:31:37

Oracle傳輸表空間

2011-08-30 17:33:10

OracleSAS宏

2011-04-13 13:56:52

Oracle臨時表

2010-10-25 14:28:53

oracle trun

2010-10-25 16:52:48

oracle管道函數(shù)

2010-10-25 17:08:34

oracle聚合函數(shù)

2010-04-14 13:22:10

Oracle系統(tǒng)函數(shù)

2011-05-18 10:07:13

oracle存儲

2010-04-01 09:11:05

Oracle函數(shù)

2010-04-01 09:46:04

Oracle日期函數(shù)

2011-03-16 09:42:27

Oracle臨時表

2010-10-29 16:48:30

oracle查詢所有表

2010-11-16 10:32:01

Oracle創(chuàng)建表空間

2017-03-09 13:11:48

Oracle分析函數(shù)
點贊
收藏

51CTO技術棧公眾號