Oracle存储过程返回游标实例详解


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; 

View Code

 

 1 declare @my_cur cursor
 2 
 3 declare @id int, @name nvarchar(20)
 4 
 5 exec tb1_proc @my_cur output
 6 
 7 --open @cursor    -- @cursor already opened
 8 
 9 fetch next from @my_cur into @id, @name
10 
11 while(@@fetch_status=0)
12 
13   begin
14 
15     print '编号:' + convert(nvarchar,@id)
16 
17     print '姓名:' + @name
18 
19     print '......................'
20 
21     fetch next from @my_cur into @id, @name
22 
23   end

代码如下:

创建表:

代码如下:

manbetx手机网页版 1manbetx手机网页版 2

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; 

View Code

--定义全局变量 
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; 

 注意:存储过程遭到开创游标后而开辟

–创建返回游标的囤积过程 

manbetx手机网页版 3manbetx手机网页版 4

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

 使用存储过程返回的游标:

–调用 

View Code

declare 
cur_calling sys_refcursor; 
begin 
p_temp_procedure(cur_calling); --这样这个游标就有值了 
for rec_next in cur_calling loop 
.... 
end loop; 
end; 
1 1 create table tb1(
2 2 
3 3 id int ,
4 4 
5 5 name nvarchar(20)
6 6 
7 7 )

 

创返回游标的存储过程:

代码如下:

 1 create proc tb1_proc (
 2 
 3 @cur cursor varying output
 4 
 5 )
 6 
 7 as
 8 
 9 begin
10 
11   set @cur=cursor for
12 
13   select * from tb1
14 
15 end
16 
17 open @cur

代码如下:


(2)在包头中阐明一个游表类型,然后调用者申明一个夫类型的游标变量,传于返回游标的蕴藏过程
,存储过程out这个结果集,这种措施十分麻烦.游标类型不克像索引表一样以create
or replace
type方法来创造,所以只好当包中申明,并且要运用/来实行,后面的囤积过程才认这个游标类型.(不引进,但是建议一旦知并且使会见这种艺术,毕竟她起它们是的理) 

manbetx手机网页版 5manbetx手机网页版 6

代码如下:

 

发生俩种办法
无异于栽是宣称系统游标,一种植是宣称由定义游标,然后后面操作一样,参数类型也 
in out 或out 
(1)声明个人系统游标.(推荐) 

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

调用 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图