六、PL/SQL 游标


一、游标简介

为支持Oracle处理SQL语句,需要创建一个名为上下文区域的内存区域,其中包含用于处理该语句所需的信息,游标是相对于上下文区域的句柄或者指针。

二、游标类型

  • 每当SQL语句执行时,Oracle会自动地声明一个隐式游标。
  • 对于返回多行数据的任何世纪公园旬,该程序可以定义显示游标,这个声明允许应用程序顺序地处理游标所返回的每行数据。

三、隐式游标

  • 无论何时SQL语句执行,当该SQL语句不存在显示游标时,都会产生一个隐式游标。
  • 游标自动地与每个DML(数据操作)语句(update,delete和insert)建立关联。
  • 在处理隐式游标的过程中,oracle自动地执行open,fetch和close操作。

游标有一些属性例如ROWCOUNT。SQL%ROWCOUNT会返回被更新的数据行数

BEGIN
  UPDATE ooag_t
     SET ooag011 = '王五'
   WHERE ooag001 = '00261'
     AND ooagent = 70;
   -- 输出更新的行数
  DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;

四、显示游标

在PL/SQL语句块的DECLARE部分对该游标命名,即生成显示游标。
处理显示游标的过程包括如下步骤:

  • 声明游标:这会在内存中建立游标的初始化环境。
  • 打开游标:打开被声明的游标,并分配内存。
  • 检索游标:现在,被声明和打开的游标能够检索数据。
  • 关闭游标:被声明、打开和检索使用后的游标必须被关闭,以释放所分配的内存。

4.1 声明游标

游标声明会定义游标的名称,并把游标名称与某SELECT语句建立关联。
CURSOR c_cursor_name IS select statement

建议定义游标名称时始终使用前缀c_

DECLARE
    CURSOR c_OoagCursor IS
        SELECT * FROM ooag_t WHERE ooagent = 70;
    ......

4.2 记录类型

一个记录就是一个复合的数据结构,这意味着它由一个或者多个元素组成。记录非常像数据库表中的一行数据。

PL/SQL支持三种类型的记录:

  • 基于表的
  • 基于游标的
  • 程序员定义的

基于表的记录就是该记录的结构来自于数据库表中的某些字段的列表。基于游标的记录是记录的数据结构匹配预定义游标的元素。为创建一个基于表或游标的记录,可以使用%ROWTYPE属性
record_name table_name pr cursor_name%ROWTYPE

DECLARE 
    -- vr_ooag 定义了一个和表ooag_t相同的结构
    -- 使用vr_ooag.xxx,xxx表示ooag_t中的列
    vr_ooag ooag_t%ROWTYPE;
BEGIN
    SELECT * 
      INTO vr_ooag
      FROM ooag_t
      WHERE ooagent = 70
        AND rownum = 1;
    DBMS_OUTPUT.PUT_LINE(vr_ooag.ooag011);
END;

上例演示的基于表的记录
下面演示基于游标的记录

DECLARE 
    -- 定义一个游标
    CURSOR c_ooag_ooag011 IS
        SELECT ooag001,ooag011 
           FROM ooag_t
          WHERE ooagent = 70;
    -- 定义一个记录类型参照游标
    vr_ooag_ooag011 c_ooag_ooag011%ROWTYPE;
......

4.3 打开游标

打开游标时࿰

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永恒的宁静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值