您的位置:首页 > 其它

使用游标出错,原因不明

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有两条记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: