oracle储存过程--游标

*游标*

什么是游标

用于临时存储一个查询返回结果的多行数据(结果集:类似于java的jdbc连接返回的resultset集合),通过遍历游标,可以逐行访问处理该结果集的数据。

*游标的使用方式:声明--->打开--->读取--->关闭*

*语法*

*游标声明:*

Cursor 游标名[(参数列表)] is 查询语句;

游标的打开:open 游标名

游标的取值:

Fetch 游标名 into 变量列表

游标的关闭:

Close 游标名;

*游标的属性*

*其中,%notfound是在游标中找不到元素的时候返回true,通过那个用来判断退出循环*

*不带有参数的游标*

*小案例:*--使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来。****

**-- Created on 2020/12/12 by zyq**
declare
 **--声明游标**
 cursor c_emp is
  select ename, sal from emp;
 **--声明变量接收游标中的数据**
 v_ename emp.ename%type;
 v_sal  emp.sal%type;
 
begin
 **--打开游标**
 open c_emp;
 **--遍历游标**
 loop
  **--获取游标中的数据**
  fetch c_emp
   into v_ename, v_sal;
  **--退出循环条件**
  exit when c_emp%notfound;
  dbms_output.put_line(v_ename || '_' || v_sal);
 end loop;
 
 **--关闭游标**
 close c_emp;

end;

*执行结果:*

SMITH_800

ALLEN_1600

WARD_1250

JONES_2975

MARTIN_1250

BLAKE_2850

CLARK_2450

SCOTT_3000

KING_5000

TURNER_1500

ADAMS_1100

JAMES_950

FORD_3000

MILLER_1300

*带有参数的游标*

*小案例:*--使用游标查询emp表中所有员工的姓名和工资,部门编号*为运行时手动输入。*****

**-- Created on 2020/12/12 by zyq**

declare

 **--声明游标  带有参数**

 cursor c_emp(v_deptno emp.deptno%type) is

  select ename, sal from emp where deptno = v_deptno;

 **--声明变量接收游标中的数据**

 v_ename emp.ename%type;

 v_sal  emp.sal%type;

begin

 **--打开游标  传入参数**

 open c_emp(10);

 **--遍历游标**

 loop

  **--获取游标中的数据**

  fetch c_emp

   into v_ename, v_sal;

  **--退出循环条件**

  exit when c_emp%notfound;

  dbms_output.put_line(v_ename || '_' || v_sal);

 end loop;

 **--关闭游标 不需要传参数了**

 close c_emp;

end;

执行结果:

CLARK_2450

KING_5000

MILLER_1300

*注意: %notfound 属性默认值为false ,所以在循环中要注意判断条件的位置,如果先判断在fetch会导致最后一条记录的值被打印两次(多循环一次默认);*

posted on   ~码铃薯~  阅读(728)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2020-01-10 oracle数据库-查询一张表中某个字段按照降序排列的前十条数据
2020-01-10 SQL语句-查询特定年份产生的数据
2020-01-10 SQL语句-查询一张表中某个字段存在相同值的数据

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示