【发布时间】:2014-02-06 13:38:28
【问题描述】:
我正在编写一个带有游标的 Sybase 存储过程,该游标从表中获取记录并插入回记录。令人惊讶的是,我发现 fetches 看到 amd 返回记录插入到同一个循环中。在某些情况下,这会导致无限循环,有时循环结束时会插入许多额外的记录。翻阅 Sybase 文档,我找不到解决方法。事务隔离无济于事,因为我们在单个事务中进行操作。当然我可以通过在循环中插入一个临时表然后在循环结束后插入回主表来解决这个问题。 但是问题仍然存在:如何将游标提取与插入到同一个表中的操作隔离开来? 伪代码如下:
create table t (v int)
go
insert into t(v) values (1)
create procedure p as
begin
declare @v int
declare c cursor for select v from t
begin transaction
open c
while 1=1 begin
fetch c into @v
if (@@sqlstatus != 0) break
insert into t (v) values (@v+1)
end
close c
commit
end
go
exec p
go
【问题讨论】:
-
您使用的是哪种 Sybase 产品?