sql 游标_详解Oracle数据库SQL%ROWCOUNT用法及实验说明

概述

最近在编写一个存储过程时,因为打算记录一下每次删除的记录数,所以用了SQL%ROWCOUNT来实现,这里简单记录下。


SQL%ROWCOUNT

SQL%ROWCOUNT是一个游标属性,而SQL中的DML操作实际上是一种隐式的游标操作,在做INSERT,UPDATE,DELETE,MERGE以及SELECT INTO操作时,Oracle会打开一个始终指向最近执行的SQL语句的隐式游标,这个游标有3个常用的属性:

(1)SQL%FOUND,有记录被修改,返回TRUE

(2)SQL%NOTFOUND,没有记录被修改,返回TRUE

(3)SQL%ROWCOUNT,语句操作的记录数


简单做个实验演示一下

1、数据准备

17a664d120e06613891afd0e89c95436.png

2、存储过程

set serveroutput ondeclare begin  execute immediate 'alter session enable parallel dml'; delete /* parallel(t,4) */ from test1 t where id=1; dbms_output.put_line('删除语句删除了'||SQL%ROWCOUNT||'条记录'||CHR(10) ||'SQL%FOUND='||CASE SQL%FOUND WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END||CHR(10) ||'SQL%NOTFOUND='||CASE SQL%NOTFOUND WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END); commit; delete from test1 where id=2; dbms_output.put_line('删除语句删除了'||SQL%ROWCOUNT||'条记录'||CHR(10) ||'SQL%FOUND='||CASE SQL%FOUND WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END||CHR(10) ||'SQL%NOTFOUND='||CASE SQL%NOTFOUND WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END); commit; delete from test1; dbms_output.put_line('删除语句删除了'||SQL%ROWCOUNT||'条记录'||CHR(10) ||'SQL%FOUND='||CASE SQL%FOUND WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END||CHR(10) ||'SQL%NOTFOUND='||CASE SQL%NOTFOUND WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END); commit; execute immediate 'alter session disable parallel dml';EXCEPTION  WHEN OTHERS THEN ROLLBACK; --有问题回滚end;/
22d0b664d91ecbd765413ac4aa064c10.png

3、测试效果

可以看到很明显记录了删除的记录。

c1fced73d9164e433440d747e1eec249.png

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下!

8098af9da3533c570606e83413d12ec3.png
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值