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会导致最后一条记录的值被打印两次(多循环一次默认);*
分类:
数据库 / Oracle存储过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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语句-查询一张表中某个字段存在相同值的数据