起因:新开发个存储过程,需要当一个用户调用存储过程操作一行数据时,另外的用户不允许调用过程操作该数据。
解决办法:先将该记录的状态改为处理中,当别的用户看到为处理中时则跳出过程。此时用到了sql%rowcount来判断是否更新了记录的状态
- updatetabletsett.status='processing'wheret.id=P_IDandt.status<>;
- ifsql%rowcount=0then
- returnendif;
起因:新开发个存储过程,需要当一个用户调用存储过程操作一行数据时,另外的用户不允许调用过程操作该数据。
解决办法:先将该记录的状态改为处理中,当别的用户看到为处理中时则跳出过程。此时用到了sql%rowcount来判断是否更新了记录的状态
由于没有用过sql%rowcount,所以特意测试了一下,下面是对sql%rowcount功能的测试:
--先建个测试用表
--向表中插入3行测试数据,插入后:
@H_写了一段过程来测试:
执行后表中数据:
@H_
由此可见sql%rowcount只会记录未被提交的最后一条sql语句的影响行数。这点很重要,如果想统计多个sql的合计影响行数,就必须在每个sql后面,用一个变量保存当前的sql%rowcount。