1.游标概念:
- 游标是一种机制,允许程序逐行处理查询返回的多行数据集。
- 游标不直接存储数据,而是作为指向查询结果集的一个指针或句柄存在。
2.游标类型
- 显式游标:需要手动声明、打开、读取(fetch)和关闭。适用于处理复杂的多行查询结果。
- 隐式游标:Oracle自动为DML(INSERT, UPDATE, DELETE)操作和查询单行数据的SELECT语句创建。主要有SQL%ROWCOUNT(受影响的行数)和SQL%NOTFOUND(是否未找到数据)属性。
- 动态游标:运行时确定查询的游标,可以处理动态SQL,分为强类型和弱类型
3.游标生命周期
- 声明 (
DECLARE
): 定义游标但不执行查询。- 打开 (
OPEN
): 执行关联的查询,但不提取数据。- 提取 (
FETCH
): 从结果集中检索一行数据并存储在指定的变量中。- 关闭 (
CLOSE
): 释放与游标相关的资源。
1.代码展示
declare
cursor cur_emp is select * from emp where deptno = 20;--声明游标
v_emp emp%rowtype;
begin
open cur_emp;--打开游标
loop
fetch cur_emp into v_emp;--提取游标
exit when cur_emp%notfound;--推出循环
dbms_output.put_line('编号:'||v_emp.empno||'-'||'名字'||v_emp.ename
||'-'||'工作:'||v_emp.job);
end loop;
close cur_emp;--关闭游标
end;
2.图片展示
4.使用游标
- 在循环中使用
FETCH
语句来逐行处理数据。- 可以使用
WHERE CURRENT OF
子句在游标指向的行上执行更新或删除操作。
5.游标的控制结构:
可以在PL/SQL块中使用
FOR LOOP
简化游标的使用,自动处理打开、提取和关闭过程。
6.游标的异常处理
需要注意处理可能发生的异常,如
NO_DATA_FOUND
(没有数据可提取)、TOO_MANY_ROWS
(查询返回多行但预期单行)等。
7.性能考量:
- 游标消耗资源,特别是当处理大量数据时。优化查询、合理使用索引、尽量减少游标的使用可以提升性能。
- 游标状态(如%ISOPEN, %FOUND, %NOTFOUND)可以帮助控制流程,避免不必要的操作。
通过理解和熟练运用这些知识点,你可以在PL/SQL编程中有效地管理和操作查询结果集