Oracle 10g数据库游标的使用学习二

本文详细介绍了PL/SQL中的游标概念及其使用方法,包括游标的声明、使用及实践案例。通过具体示例展示了如何手动打开游标进行数据检索,并对比了使用游标FOR循环的简化方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]游标格式:[/b]
CURSOR cursor_name[(parameter[,parameter]...)][return return_type]IS select_statement;


[b]游标的声明[/b]
/*
无参数的游标声明
*/
cursor c1 is select t.business_id , t.business_type from tbl_flow_work t;

/*
有参数的游标声明
*/
cursor c2 return tbl_flow_work%rowtype is select t.business_id , t.business_type from t bl_flow_work t where 	t.flow_work_id =1;
cursor cursor_a(temp_bussid number) is select tba.business_name as bn from tbl_business_a tba where tba.business_id = temp_bussid;


[b]游标的使用:[/b]
/*
游标只有在打开才能执行查询操作,OPEN语句会把满足查询条件的行锁住,
执行OPEN语句不会选取出结果集中的记录,只有在使用FETCH语句的时候才能将数据读取出来
*/
open c(parameter);
loop fetch c into v_businessname;
exit when c%notfound;
dbms_output.put_line(v_businessname);
end loop;
close c;


/*
在大多数需要使用显示游标的情况下,都可以用一个游标FOR循环来代替OPEN、FETCH和CLOSE语句,这样可以省去一些繁琐的代码。
游标FOR隐式地声明了一个%ROWTYPE类型的记录作为它的 循环索引,打开游标,
然后反复地执行把结果集中的行放到索引中去,最后在所有行都被处理完成后关闭游标。
*/
[/b]
for cfw in cursor_flowwork loop
v_busstype := cfw.bt;
dbms_output.put_line(v_busstype);
end loop;


[b]实践[/b]

手动打开游标

-- Created on 2012/12/11 by ZHENGTIAN
declare
-- 定义游标变量
flow_name_like varchar2(256):= 'zt';
flow_name varchar2(256);
flow_code varchar2(256);
cursor flow_cursor(flow_name_prefix varchar2) is select f.flow_name,f.flow_code from pdc_flow f where f.flow_name like '%'||flow_name_prefix||'%';
begin
open flow_cursor(flow_name_like);
loop fetch flow_cursor into flow_name,flow_code;
exit when flow_cursor%notfound;
dbms_output.put_line('flow_name:'||flow_name||';flow_code:'||flow_code);
end loop;
close flow_cursor;
end;


用for循环使用游标,省略手动打开游标语句

-- Created on 2012/12/11 by ZHENGTIAN
declare
-- 定义游标变量
flow_name_like varchar2(256):= 'zt';
flow_name varchar2(256);
flow_code varchar2(256);
cursor flow_cursor(flow_name_prefix varchar2) is select f.flow_name,f.flow_code from pdc_flow f where f.flow_name like '%'||flow_name_prefix||'%';
begin
/*open flow_cursor(flow_name_like);
loop fetch flow_cursor into flow_name,flow_code;
exit when flow_cursor%notfound;
dbms_output.put_line('flow_name:'||flow_name||';flow_code:'||flow_code);
end loop;
close flow_cursor;*/
for flow in flow_cursor(flow_name_like) loop
flow_name := flow.flow_name;
flow_code :=flow.flow_code;
dbms_output.put_line('flow_name:'||flow_name||';flow_code:'||flow_code);
end loop;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值