日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
oracle函數(shù)返回表的實(shí)現(xiàn)

如果要通過(guò)oracle函數(shù)實(shí)現(xiàn)返回表,應(yīng)該如何實(shí)現(xiàn)呢?下面就教您一個(gè)oracle函數(shù)返回表的實(shí)現(xiàn)方法,供您參考,希望對(duì)您學(xué)習(xí)oracle函數(shù)能有所幫助。

包里面用一個(gè)存儲(chǔ)過(guò)程,返回游標(biāo),就可以了

>包的定義
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;

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

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

調(diào)用這個(gè)oracle函數(shù)的時(shí)候,通過(guò) table() 關(guān)鍵字把管道流仿真為一個(gè)數(shù)據(jù)集

以下是一個(gè)十分簡(jiǎn)單的實(shí)例:

 
 
 
  1. create table tb1(k number, v varchar2(10));
  2. insert into tb1(k, v) values(100,'aaa');
  3. insert into tb1(k, v) values(200,'bbb');
  4. insert into tb1(k, v) values(200,'ccc');
  5. select * from tb1;
  6. create type row_type1 as object(k number, v varchar2(10));
  7. create type table_type1 as table of row_type1;
  8. create or replace function fun1 return table_type1 pipelined as
  9. v row_type1;
  10. begin
  11. for myrow in (select k, v from tb1) loop
  12. v := row_type1(myrow.k, myrow.v);
  13. pipe row (v);
  14. end loop;
  15. return;
  16. end;
  17. select * from table(fun1);

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

 
 
 
  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. select * from table(fun1(100));

這個(gè)方案基本可以實(shí)現(xiàn)返回表的要求,但是需要注意的是,過(guò)多的集合對(duì)象的申請(qǐng)不利于管理。
 


標(biāo)題名稱(chēng):oracle函數(shù)返回表的實(shí)現(xiàn)
當(dāng)前路徑:http://www.5511xx.com/article/cochdje.html