达梦PL/SQL之游标介绍

一、游标的概念

游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是从数据库中提取的数据块临时存储到计算机内存中进行处理,从而提高数据处理速度,最后将处理结果显示出来或最终写回数据库提高数据处理的效率。

游标的类型有两种,一种是静态游标一种是动态游标;而静态游标又分为两种,一种是显示游标,由用户定义、操作,用于处理返回多行数据的select查询;一种是隐式游标,由系统自动进行操作,用于处理DML增删查改insert、delete、select、update返回和单行查询select...into...语句

二、静态游标

上面提到过,静态游标分为显示游标和隐式游标,下面就分开介绍这两种游标:

静态游标之显示游标

显示游标必须在PL/SQL块的声明部分定义,也可以引用变量,但引用的变量必须在游标定义之前定义,其基本语法定义如下:
CURSOR cursor_name IS select_statement

在使用游标时,我们需要打开,其基本语法如下:
OPEN cursor_name

如果需要检索游标,将游标的数据对应到定义的变量,其基本语法如下:
FETCH cursor_name INTO variable_list|record_variable

使用完毕后,为了数据库资源更好的利用,则是需要关闭游标,其基本语法如下:
CLOSE cursor_name

关于PL/SQL结构部分,之前有写相关介绍博文,具体可访问下面链接了解:

达梦数据库PL/SQL之控制结构_明月装饰你的窗的博客-CSDN博客

下面我们看一个简单的游标应用示例

首先创建要给测试表TEST1,插入几条测试数据,具体数据如下:

目前TEST1表里数据,custins_id=4的AAA字段是A,然后我们通过游标,将这个AAA数据update更新为‘d’测试:首先定义一个游标testa为select查询TEST1表数据,后续打开游标,用IF判断testa游标查询结果是否为真,如果查询到数据,则更新custins_id=4这个条件下AAA列字段为d;若testa游标查询结果为假,则打印语句‘There is not custins_id equal to 4!’,关闭游标后程序结束。

从上面执行结果可以看到,当前我们执行成功,sql执行影响一条记录,然后我们查询是否更新数据成功:

由上面测试也可以调整,由于我们TEST1表数据只有4条,如果我们把游标select查询where条件指定为custins=5测试:

在上面我们一直在用$cursor_name%FOUND作为判断条件,这里就引申出了游标的另一个概念,即游标属性,目前达梦PL/SQL支持的游标属性有下面几种:

cursor_name%ISOPEN:布尔型,游标是否打开。是则返回 TRUE,否则返回 FALSE。
cursor_name%FOUND: 布尔型,语句是否修改或查询到了记录,是则返回 TRUE,否则返回 FALSE;
cursor_name%NOTFOUND:布尔型,语句是否未能成功修改或查询到记录,是则返回 TRUE,否则返回FALSE;
cursor_name%ROWCOUNT:数值型,DML 语句执行影响的行数,或 SELECT…INTO 语句返回的行数。

下面再写一个示例,同样测试表为DMHR.CITY表,将我们上面提到的几种游标属性全部应用进去(%FOUND和%NOTFOUND基本类似):  

从上面的示例中可以看到,我们主要用的是IF判断,执行后续相关操作,实际应用中,我们也可以使用到LOOP循环,for循环,while循环等,下面是针对DM数据库DMHR.CITY表的一个简单循环示例:

静态游标之隐式游标

隐式游标没有OPEN、FETCH、CLOSE命令,用于处理INSERT、UPDATE、DELETE和SELECT…INTO语句,其属性和显示游标一样有四种:

SQL%ISOPEN:布尔型,游标是否打开。是返回 TRUE,否返回 FALSE。
SQL%FOUND: 布尔型,语句是否修改或查询到了记录,是返回 TRUE,否则返回 FALSE。
SQL%NOTFOUND:布尔型,语句是否未能成功修改或查询到记录,是返回 TRUE,否则返回FALSE;
SQL%ROWCOUNT:数值型,DML 语句执行影响的行数,或 SELECT…INTO 语句返回的行数。

稍微修改一下SQL,让其可以修改数据:

三、动态游标

静态游标在使用时,使用的查询语句已经确定;如果需要在运行的时候动态的绝对执行哪种查询,可以使用REF游标(动态游标)和游标变量。

创建游标变量的基本语法如下:

TYPE ref_cursor_name IS REF CURSOR;

cursor_name ref_cursor_name;

下面还是用DMHR.CITY表的数据作为测试表,打印出城市ID和城市名:

在上面的示例中,我们额外定义了变量V_ID和V_NAME,用来作为输出时使用,为了简化变量,以及防止变量数据类型定义错误,我们在定义变量的时候,也可以使用%TYPE和%ROWTYPE来引用源表数据类型,修改SQL后如下图所示:

以上就是总结的达梦PL/SQL中关于游标的介绍,更多相关内容,可访问达梦官网学习
https://eco.dameng.com/docs/zh-cn/start/index.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值