oracle游标cursor简单使用
【摘要】 总共介绍两种游标一种高效使用游标cursor 、sys_refcursor 、 bulk collect
1、cursor游标使用
/*简单cursor游标 *students表里面有name字段,你可以换做其他表测试 */--定义declare --定义游标并且赋值(is 不能和cursor分开使用) cursor stus_cur is select * fr...
总共介绍两种游标一种高效使用游标cursor 、sys_refcursor 、 bulk collect
1、cursor游标使用
-
/*简单cursor游标
-
*students表里面有name字段,你可以换做其他表测试
-
*/
-
--定义
-
declare
-
--定义游标并且赋值(is 不能和cursor分开使用)
-
cursor stus_cur is select * from students;
-
--定义rowtype
-
cur_stu students%rowtype;
-
/*开始执行*/
-
begin
-
--开启游标
-
open stus_cur;
-
--loop循环
-
loop
-
--循环条件
-
exit when stus_cur%notfound;
-
--游标值赋值到rowtype
-
fetch stus_cur into cur_stu;
-
--输出
-
dbms_output.put_line(cur_stu.name);
-
--结束循环
-
end loop;
-
--关闭游标
-
close stus_cur;
-
/*结束执行*/
-
end;
执行结果
-
SQL> declare
-
2 --定义游标并且赋值(is 不能和cursor分开使用)
-
3 cursor stus_cur is select * from students;
-
4 --定义rowtype
-
5 cur_stu students%rowtype;
-
6 /*开始执行*/
-
7 begin
-
8 --开启游标
-
9 open stus_cur;
-
10 --loop循环
-
11 loop
-
12 --循环条件
-
13 exit when stus_cur%notfound;
-
14 --游标值赋值到rowtype
-
15 fetch stus_cur into cur_stu;
-
16 --输出
-
17 dbms_output.put_line(cur_stu.name);
-
18 --结束循环
-
19 end loop;
-
20 --关闭游标
-
21 close stus_cur;
-
22 /*结束执行*/
-
23 end;
-
24 /
-
-
杨过
-
郭靖
-
付政委
-
刘自飞
-
江风
-
任我行
-
任盈盈
-
令狐冲
-
韦一笑
-
张无忌
-
朵儿
-
谢逊
-
小龙女
-
欧阳锋
-
欧阳锋
2、sys_refcursor游标使用
-
/*
-
*游标名:sys_refcursor
-
*特别注意赋值方式:for
-
*与上重复内容不在叙述
-
*/
-
declare
-
stu_cur sys_refcursor;
-
stuone students%rowtype;
-
-
begin
-
--这句赋值方式for
-
open stu_cur for select * from students;
-
--fetch赋值给rowtype
-
fetch stu_cur into stuone;
-
-
loop
-
dbms_output.put_line(stuone.name||' '||stuone.hobby);
-
fetch stu_cur into stuone;
-
exit when stu_cur%notfound;
-
end loop;
-
end;
执行结果
-
SQL> /*
-
2 *游标名:sys_refcursor
-
3 *特别注意赋值方式:for
-
4 *与上重复内容不在叙述
-
5 */
-
6 declare
-
7 stu_cur sys_refcursor;
-
8 stuone students%rowtype;
-
9
-
10 begin
-
11 --这句赋值方式for
-
12 open stu_cur for select * from students;
-
13 --fetch赋值给rowtype
-
14 fetch stu_cur into stuone;
-
15
-
16 loop
-
17 dbms_output.put_line(stuone.name||' '||stuone.hobby);
-
18 fetch stu_cur into stuone;
-
19 exit when stu_cur%notfound;
-
20 end loop;
-
21 end;
-
22 /
-
-
杨过 保护小龙女
-
郭靖 修炼降龙十八掌
-
付政委 看小人书
-
刘自飞 编程写代码
-
江风 编程写代码
-
任我行 修炼神功
-
任盈盈 游山玩水
-
令狐冲 行侠仗义
-
韦一笑 吸拾人雪
-
张无忌 修行
-
朵儿 洗浴
-
谢逊 毕生研究屠龙刀
-
小龙女 修炼玉女心经
-
欧阳锋 看小人书
补充一种循环条件
-
declare
-
-
stu_cur sys_refcursor;
-
stuone students%rowtype;
-
-
begin
-
open stu_cur for select * from students;
-
fetch stu_cur into stuone;
-
--特别注意循环条件的改变
-
--这个条件是发现了在循环
-
--与上一个notfound不同的
-
while stu_cur%found loop
-
dbms_output.put_line(stuone.name||' '||stuone.hobby);
-
fetch stu_cur into stuone;
-
end loop;
-
end;
--普通的fetch into
-
/*普通方式*/
-
declare
-
cursor myemp_cur is select * from myemp;
-
-
v_myemp myemp%rowtype;
-
-
begin
-
open myemp_cur;
-
fetch myemp_cur into v_myemp;
-
while myemp_cur%found loop
-
dbms_output.put_line(v_myemp.ename);
-
fetch myemp_cur into v_myemp;
-
end loop;
-
end;
--高效的bulk collect
-
/*高效bulk collect for*/
-
declare
-
cursor myemp_cur
-
is select * from myemp;
-
-
type myemp_tab is table of myemp%rowtype;
-
-
myemp_rd myemp_tab;
-
-
begin
-
open myemp_cur;
-
loop
-
fetch myemp_cur bulk collect into myemp_rd limit 20;
-
for i in 1..myemp_rd.count loop
-
dbms_output.put_line('姓名:'||myemp_rd(i).ename);
-
end loop;
-
exit when myemp_cur%notfound;
-
-
end loop;
-
end;
文章来源: bugstack.blog.csdn.net,作者:小傅哥,版权归原作者所有,如需转载,请联系作者。
原文链接:bugstack.blog.csdn.net/article/details/7900666
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)