sql 游标_一文看懂如何用SQL%ROWCOUNT返回SQL语句的影响数量

博主在编写存储过程时,用SQL%ROWCOUNT记录每次删除的记录数。SQL%ROWCOUNT是游标属性,Oracle在做INSERT等操作时会打开隐式游标,其常用属性还有SQL%FOUND和SQL%NOTFOUND。博主还进行了数据准备、存储过程编写和测试,明显记录了删除记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

最近在编写一个存储过程时,因为打算记录一下每次删除的记录数,所以用了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、数据准备

fb7c69ce5e334ec1b2625c6f4d3b20be.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;/
58cd6e653dac0eaf3846ca75fd8c04c7.png

3、测试效果

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

13e5848ed42d367e7a62038885c1b60d.png

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

19a67605f553e1a81ec9ac2d6d0b855a.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值