使用游标出错,原因不明
2008-08-28 22:47
232 查看
最近几天十分郁闷,源于工作中出现问题,却找不到原因。
某部门代发工资,四千多条记录有一千多条在交易流水中发现记了两次账,而且记账时间基本在同一时间,有的也只相差一秒。
代发工资的存储过程采用游标轮询,游标中可确定没有因工作人员失误导致同一账户存在两条记录。也可确保程序中已提交成功的记录,在再次提交时不致再次记账。而且即使是程序问题多次提交导致重复记账,其记账时间也应相差较大。记账时间是取的系统时间。怀疑是数据库系统出了问题,但查找数据库日志,也没发现异常。领导十分重视,一天催着给出合理答复,可又实在不知是什么原因,痛苦啊。附游标部分如下:
declare curs cursor for
select a,b,c from a1
where ... order by a for read only
open curs
fetch curs into @a,@b,@c
while (@@sqlstatus <>2)
begin
begin tran
if @@sqlstatus = 1 goto errorlab
对@a,@b,@c进行处理并插入另一表tab中
commit tran
goto nextlab
errorlab:
while @@transcount>0 rollback
nextlab:
fetch curs into @a,@b,@c
end
close curs
deallocate cursor curs
执行此存储过程中游标后,游标中部分记录被重复执行了两次,在表tab中除交易流水号不同外,@a,@b,@c有两条记录
某部门代发工资,四千多条记录有一千多条在交易流水中发现记了两次账,而且记账时间基本在同一时间,有的也只相差一秒。
代发工资的存储过程采用游标轮询,游标中可确定没有因工作人员失误导致同一账户存在两条记录。也可确保程序中已提交成功的记录,在再次提交时不致再次记账。而且即使是程序问题多次提交导致重复记账,其记账时间也应相差较大。记账时间是取的系统时间。怀疑是数据库系统出了问题,但查找数据库日志,也没发现异常。领导十分重视,一天催着给出合理答复,可又实在不知是什么原因,痛苦啊。附游标部分如下:
declare curs cursor for
select a,b,c from a1
where ... order by a for read only
open curs
fetch curs into @a,@b,@c
while (@@sqlstatus <>2)
begin
begin tran
if @@sqlstatus = 1 goto errorlab
对@a,@b,@c进行处理并插入另一表tab中
commit tran
goto nextlab
errorlab:
while @@transcount>0 rollback
nextlab:
fetch curs into @a,@b,@c
end
close curs
deallocate cursor curs
执行此存储过程中游标后,游标中部分记录被重复执行了两次,在表tab中除交易流水号不同外,@a,@b,@c有两条记录
相关文章推荐
- 在一个程序中加载另一程序使用GlobalFree()函数出错的原因
- 第一次使用vs2010+opencv244,调试出错及原因
- 访问WEB-INF下使用frameset标签页面出错的原因
- HQL语句 使用new 关键字出错的原因
- 在使用vector的push_back函数时,Release版下运行会出错的一个原因
- 输入$ python text.py出错的原因——在windows系统使用idle的情况下
- 使用opencv的contours,结果发现vector原因不明的越界
- Rails使用plain渲染出错的原因
- 在使用vector的push_back函数时,Release版下运行会出错的一个原因
- 用DOS命令创建Maven项目时出错,原因是访问网络使用了代理
- 使用旗正规则引擎内存表出错的原因及解决方法
- 使用springMVC搭建系统时项目出现红叉以及启动tomcat出错的原因
- 使用InputStreamResource构造XmlBeanFactory出错原因
- Rails使用plain渲染出错的原因
- 访问WEB-INF下使用frameset标签页面出错的原因
- 使用make编译android项目时,修改了文件xml文件名称,导致编译出错的问题原因
- Windows 下使用adt-bundle-windows 启动SDK Manager 时出错闪退的原因和解决办法
- Eclipse 使用AWT时出错的一个原因(路径找不到)
- 使用BAK文件还原SQL2000出错的原因
- 在使用vector的push_back函数时,Release版下运行会出错的一个原因