oracle 数据库 游标(最详细的)

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编程中有效地管理和操作查询结果集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值