oracle中sql%rowcount的作用

前端之家收集整理的这篇文章主要介绍了oracle中sql%rowcount的作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

起因:新开发个存储过程,需要当一个用户调用存储过程操作一行数据时,另外的用户不允许调用过程操作该数据。

解决办法:先将该记录的状态改为处理中,当别的用户看到为处理中时则跳出过程。此时用到了sql%rowcount来判断是否更新了记录的状态

@H_301_25@
  • updatetabletsett.status='processing'wheret.id=P_IDandt.status<>;
  • ifsql%rowcount=0then
  • returnendif;

  • 由于没有用过sql%rowcount,所以特意测试了一下,下面是对sql%rowcount功能的测试:

    --先建个测试用表

    copy
      createZ_TEMP
    1. (
    2. C1VARCHAR2(10),
    3. C2VARCHAR2(10),
    4. C3VARCHAR2(10)
    5. );

    --向表中插入3行测试数据,插入后:

    copy
      C1C2C3
    1. ------------------------------1
    2. 2
    3. 3

    写了一段过程来测试:

    copy
      declare
    1. v_nnumber;
    2. beginupdatez_temptsett.c2='1'wheret.c1=1;--更新一行记录c1=1v_n:=sql%rowcount;
    3. dbms_output.put_line('第1.0次:'||v_n);
    4. commitv_n:=sql%rowcount;
    5. dbms_output.put_line('第1.1次:'||v_n);--提交后sql%rowcounty已经为0了
    6. z_temptt.c2='2't.c1=2;--更新一行记录c1=2'第2次:'||v_n);
    7. '3';--更新三行记录'第3次:'commit;
    8. end;
    copy
      /*输出结果:
    1. 第1.0次:1
    2. 第1.1次:0
    3. 第2次:1
    4. 第3次:3
    5. */

    执行后表中数据:

    copy
      13
    1. 23
    2. 33

    由此可见sql%rowcount只会记录未被提交的最后一条sql语句的影响行数。这点很重要,如果想统计多个sql的合计影响行数,就必须在每个sql后面,用一个变量保存当前的sql%rowcount。

    原文链接:https://www.f2er.com/oracle/206681.html

    猜你在找的Oracle相关文章