oracle中的cousor,oracle数据库中的cursor

oracle中的cousor,oracle数据库中的cursor总共介绍两种游标一种高效使用游标 cursor sys refcursor bulk collect 1 cursor 游标使用 简单 cursor 游标 students 表里面有 name 字段 你可以换做其他表测试 定义 declare 定义游标并且赋值 is 不能和 cursor 分开使用

大家好,我是讯享网,很高兴认识大家。

总共介绍两种游标一种高效使用游标cursor 、sys_refcursor、 bulk collect

1、cursor游标使用

/*简单cursor游标

*students表里面有name字段,你可以换做其他表测试

*/

--定义

declare

--定义游标并且赋值(is 不能和cursor分开使用)

cursorstus_curisselect*fromstudents;

--定义rowtype

cur_stu students%rowtype;

/*开始执行*/

begin

--开启游标

openstus_cur;

--loop循环

loop

--循环条件

exit whenstus_cur%notfound;

--游标值赋值到rowtype

fetchstus_curintocur_stu;

--输出

dbms_output.put_line(cur_stu.name);

--结束循环

endloop;

--关闭游标

closestus_cur;

/*结束执行*/

end;

/*简单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 cursorstus_curisselect*fromstudents;

4 --定义rowtype

5 cur_stu students%rowtype;

6 /*开始执行*/

7 begin

8 --开启游标

9 openstus_cur;

10 --loop循环

11 loop

12 --循环条件

13 exit whenstus_cur%notfound;

14 --游标值赋值到rowtype

15 fetchstus_curintocur_stu;

16 --输出

17 dbms_output.put_line(cur_stu.name);

18 --结束循环

19 endloop;

20 --关闭游标

21 closestus_cur;

22 /*结束执行*/

23 end;

24 /

杨过

郭靖

付政委

刘自飞

江风

任我行

任盈盈

令狐冲

韦一笑

张无忌

朵儿

谢逊

小龙女

欧阳锋

欧阳锋

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

openstu_curforselect*fromstudents;

--fetch赋值给rowtype

fetchstu_curintostuone;

loop

dbms_output.put_line(stuone.name||' '||stuone.hobby);

fetchstu_curintostuone;

exit whenstu_cur%notfound;

endloop;

end;

/*

*游标名: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 openstu_curforselect*fromstudents;

13 --fetch赋值给rowtype

14 fetchstu_curintostuone;

15

16 loop

17 dbms_output.put_line(stuone.name||' '||stuone.hobby);

18 fetchstu_curintostuone;

19 exit whenstu_cur%notfound;

20 endloop;

21 end;

22 /

杨过 保护小龙女

郭靖 修炼降龙十八掌

付政委 看小人书

刘自飞 编程写代码

江风 编程写代码

任我行 修炼神功

任盈盈 游山玩水

令狐冲 行侠仗义

韦一笑 吸拾人雪

张无忌 修行

朵儿 洗浴

谢逊 毕生研究屠龙刀

小龙女 修炼****

欧阳锋 看小人书

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

openstu_curforselect*fromstudents;

fetchstu_curintostuone;

--特别注意循环条件的改变

--这个条件是发现了在循环

--与上一个notfound不同的

while stu_cur%found loop

dbms_output.put_line(stuone.name||' '||stuone.hobby);

fetchstu_curintostuone;

endloop;

end;

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

cursormyemp_curisselect*frommyemp;

v_myemp myemp%rowtype;

begin

openmyemp_cur;

fetchmyemp_curintov_myemp;

while myemp_cur%found loop

dbms_output.put_line(v_myemp.ename);

fetchmyemp_curintov_myemp;

endloop;

end;

/*普通方式*/

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 collectfor*/

declare

cursormyemp_cur

isselect*frommyemp;

type myemp_tab istableofmyemp%rowtype;

myemp_rd myemp_tab;

begin

openmyemp_cur;

loop

fetchmyemp_cur bulk collectintomyemp_rd limit 20;

foriin1..myemp_rd.countloop

dbms_output.put_line('姓名:'||myemp_rd(i).ename);

endloop;

exit whenmyemp_cur%notfound;

endloop;

end;

小讯
上一篇 2025-02-09 18:55
下一篇 2025-02-22 15:48

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/16659.html