Oracle存儲過程返回游標實例詳解


有倆種方法
一種是聲明系統游標,一種是聲明自定義游標,然后后面操作一樣,參數類型為 
in out 或out 
(1)聲明個人系統游標.(推薦) 

代碼如下:

create or replace p_temp_procedure 
( 
cur_arg out sys_refcursor; --方法1 
) 
begin 
open cur_arg for select * from tablename; 
end 

調用 

代碼如下:
declare 
cur_calling sys_refcursor; 
begin 
p_temp_procedure(cur_calling); --這樣這個游標就有值了 
for rec_next in cur_calling loop 
.... 
end loop; 
end; 

 

(2)在包頭中申明一個游表類型,然后調用者申明一個這個類型的游標變量,傳給返回游標的存儲過程 ,存儲過程out這個結果集,這種方法很麻煩.游標類型不能像索引表一樣使用create or replace type方法來創建,所以只能在包中申明,並且需要使用/來執行,后面的存儲過程才認這個游標類型.(不推薦,但是建議要知道並且要會這種方式,畢竟它有它存在的道理) 

代碼如下:
--定義全局變量 
create or replace package pkg_package 
as 
type type_cursor is ref cursor; 
type type_record is record 
( 
test01 varchar2(32), 
test02 varchar2(32), 
test03 varchar2(32) 
); 
end; 

 

--創建返回游標的存儲過程 

代碼如下:
create or replace procedure p_temp_procedure 
( 
cur_out_arg out pkg_package.type_cursor 
) 
is 
begin 
open cur_out_arg for select * from test; 
end; 

 

--調用 

代碼如下:
declare 
cur_out_arg pkg_package.type_cursor; 
rec_arg pkg_package.type_record; 
begin 
p_temp_procedure(cur_out_arg); 
fetch cur_out_arg into rec_arg; 
dbms_output.put_line(rec_arg.test01); 
dbms_output.put_line(rec_arg.test02); 
dbms_output.put_line(rec_arg.test03); 
end; 

轉:http://www.jb51.net/article/32447.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM