oracle中sql%rowcount的作用详解
起因:新开发个存储过程,需要当一个用户调用存储过程操作一行数据时,另外的用户不允许调用过程操作该数据。
解决办法:先将该记录的状态改为处理中,当别的用户看到为处理中时则跳出过程。此时用到了sql%rowcount来判断是否更新了记录的状态
update table t set t.status = 'processing' where t.id = P_ID and t.status <> 'processing' ; if sql%rowcount = 0 then return; end if;
由于没有用过sql%rowcount,所以特意测试了一下,下面是对sql%rowcount功能的测试:
--先建个测试用表
create table Z_TEMP ( C1 VARCHAR2(10), C2 VARCHAR2(10), C3 VARCHAR2(10) );
--向表中插入3行测试数据,插入后:
C1 C2 C3 ---------- ---------- ---------- 1 2 3
写了一段过程来测试:
declare v_n number; begin update z_temp t set t.c2 = '1' where t.c1 = 1; --更新一行记录 c1 = 1 v_n := sql%rowcount; dbms_output.put_line('第1.0次:' || v_n); commit; v_n := sql%rowcount; dbms_output.put_line('第1.1次:' || v_n);--提交后sql%rowcounty已经为0了 update z_temp t set t.c2 = '2' where t.c1 = 2; --更新一行记录 c1 = 2 v_n := sql%rowcount; dbms_output.put_line('第2次:' || v_n); update z_temp t set t.c2 = '3'; --更新三行记录 v_n := sql%rowcount; dbms_output.put_line('第3次:' || v_n); commit; end;
/*输出结果:
第1.0次:1
第1.1次:0
第2次:1
第3次:3
*/
执行后表中数据:
C1 C2 C3 ---------- ---------- ---------- 1 3 2 3 3 3
由此可见sql%rowcount只会记录未被提交的最后一条SQL语句的影响行数。这点很重要,如果想统计多个sql的合计影响行数,就必须在每个sql后面,用一个变量保存当前的sql%rowcount。
到此这篇关于oracle中sql%rowcount的作用的文章就介绍到这了,更多相关oracle sql%rowcount内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Oracle数据库如何将表的某一列所有值用逗号隔开去重后合并成一行
在做系统时经常会遇到在⼀个字段中,⽤逗号或其他符号分隔存储多个信息,这篇文章主要给大家介绍了关于Oracle数据库如何将表的某一列所有值用逗号隔开去重后合并成一行的相关资料,需要的朋友可以参考下2023-12-12Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析
这篇文章主要介绍了Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析,小编觉得还是挺不错的,这里分享给大家,供需要的朋友参考。2017-10-10Oracle账户被锁错误:the account is locked解决方法
the account is locked意思是账户被锁定了,这种情况需要大家去解锁,这篇文章主要给大家介绍了关于Oracle账户被锁错误:the account is locked的解决方法,需要的朋友可以参考下2023-12-12
最新评论