欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

程序员文章站 2022-10-31 23:08:06
早前在做一个短信接口时,客户端通过webservice接口发送短信请求,我用一个PLSQL存储过程接收后进行一些处理,然后返回一个处理结果,其中有一段是这样的: 大致意思是把...

早前在做一个短信接口时,客户端通过webservice接口发送短信请求,我用一个PLSQL存储过程接收后进行一些处理,然后返回一个处理结果,其中有一段是这样的:

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

大致意思是把短信申请中号码有效的部分进行发送,然后返回总共成功了多少条。当查询的基表数据量比较大,或者SQL的处理逻辑本身比较慢的时候,这种做法效率就显得太低了。比如另外一个更常见的场景是根据输入文本模糊查找企业清单,同时返回结果数:

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

一样的SQL执行了2遍,而且每遍执行的时间比较长,这种情况下可以用到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,语句操作的记录数

那么上述的例子中取数量的语句,就可以改为简单的赋值语句了:

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

看几个例子:

1.INSERT语句的游标属性,指向最近执行的一条SQL

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

2.UPDATE语句的游标属性

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

3.MERGE语句的游标属性,返回的数量是指INSERT和UPDATE的总数

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

4.DELETE语句的游标属性

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)

5.SELECT INTO语句的游标属性

用SQL%ROWCOUNT返回SQL语句的影响数量(实例)