日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
實現(xiàn)Oracle游標(biāo)的動態(tài)形式講解

在開發(fā)過程的中,我們經(jīng)常要用到Oracle游標(biāo)來進(jìn)行相關(guān)的統(tǒng)計(不用臨時表)并且返回其統(tǒng)計結(jié)果,但是游標(biāo)的后面SQL語句往往是動態(tài)的,例如select * from tablename where ?order ?."?"代表條件,這樣該如何處理呢?

在同事的幫助下我實踐了一下??偨Y(jié)出來。

假設(shè)tablename表中有field如下:

 
 
 
  1. field1 varchar2(50)   
  2. field2 Varchar2(50)   
  3. field3 Varchar(50)   
  4. field4 varchar2(50)   
  5. field5 varchar2(20)   
  6. field6 float,   
  7. field7 float   

 

1.定義游標(biāo)

 
 
 
  1. create or replace package RefCursor is   
  2. -- Author : Ricky   
  3. -- Created : 2003-9-1 14:08:45   
  4. -- Purpose :   
  5. -- Public type declarations   
  6. type t_RefCursor is ref cursor;   
  7. end RefCursor; 

2.創(chuàng)建類型

創(chuàng)建的類型與tablename中表的fields一致,當(dāng)然也要看你實際是否要統(tǒng)計所有的fields.

 
 
 
  1. create or replace type TableType as object   
  2.  (   
  3. -- Author : Ricky   
  4. -- Created : 2003-8-25 9:12:08   
  5. -- Purpose :   
  6. -- Attributes   
  7. field1 varchar2(50),   
  8. field2 Varchar2(50),   
  9. field3 Varchar(50),   
  10. field4 varchar2(50),   
  11. field5 varchar2(20),   
  12. field6 float,   
  13. field7 float   
  14.  );  

3.創(chuàng)建表類型

 
 
 
  1. create or replace type TableTypeList as table of TableType;  

4.在存儲過程或者函數(shù)中使用,下面在函數(shù)中使用(存儲過程中不能用return一個表結(jié)構(gòu),要用到臨時表)

 
 
 
  1. CREATE OR REPLACE FUNCTION "TEST" (   
  2. return TableTypeList pipelined as   
  3. begin   
  4. v_Cur RefCursor.t_Refcursor;   
  5. v_SQLStatement string(10000);   
  6. v_Table tablename%rowtype;   
  7. tmp1 tablename.field1%Type;   
  8. tmp2 tablename.field2%Type;   
  9. tmp3 tablename.field3%Type;   
  10. tmp4 tablename.field4%Type;   
  11. tmp5 tablename.field5%Type;   
  12. tmp6 tablename.field6%Type;   
  13. tmp7 tablename.field6%Type;   
  14. v_SQLStatement := 'Select * From tablename where field1='1' order by field1';   
  15. open v_Cur for v_SQLStatement;   
  16. loop   

這里是循環(huán)過程
 

 
 
 
  1. fetch v_Cur into v_Comm;   
  2. exit when v_CommCur%notfound;  

這里是你要處理的統(tǒng)計過程,中間的過程我沒有做統(tǒng)計,各位在實踐中按需要自己添加。
 

 
 
 
  1. field1 = v_Cur.field1;   
  2. field2 = v_Cur.field2;   
  3. field3 = v_Cur.field3;   
  4. field4 = v_Cur.field4;   
  5. field5 = v_Cur.field5;   
  6. field6 = v_Cur.field6;   
  7. field7 = v_Cur.field7;   
  8. v_Table = TableType(field1,   
  9. field2,   
  10. field3,   
  11. field4,   
  12. field5,   
  13. field6,   
  14. field7)   
  15. pipe row(v_Table);   
  16. end loop   
  17. end;  

以上的相關(guān)內(nèi)容就是對Oracle游標(biāo)動態(tài)形式的實現(xiàn)的介紹,望你能有所收獲。


網(wǎng)站名稱:實現(xiàn)Oracle游標(biāo)的動態(tài)形式講解
本文網(wǎng)址:http://www.dlmjj.cn/article/dpippei.html