又遇到诡异问题了,求助各位大虾了。
我在一个存储过程里,使用了游标来进行表A数据处理。
然而在打开游标前,需要先删除表A的一些数据,于是我用了TRUNCATE TABLE来对表A进行删除记录操作。
这样,打开游标后,操作正常。
但是,由于多用户问题,我必须将TRUNCATE TABLE改成DELETE FROM语句来替换原来的TRUNCATE TABLE,问题由此产生了,删除后,游标打开表A的记录就不稳定了!!!
已经调试了好久了,始终没有找到原因啊,求助大虾们了!!!
我在一个存储过程里,使用了游标来进行表A数据处理。
然而在打开游标前,需要先删除表A的一些数据,于是我用了TRUNCATE TABLE来对表A进行删除记录操作。
这样,打开游标后,操作正常。
但是,由于多用户问题,我必须将TRUNCATE TABLE改成DELETE FROM语句来替换原来的TRUNCATE TABLE,问题由此产生了,删除后,游标打开表A的记录就不稳定了!!!
已经调试了好久了,始终没有找到原因啊,求助大虾们了!!!
同时加上锁,防止读 脏数据。DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
LOCAL--指定该游标的作用域对在其中创建它的批处理、存储过程或触发器是局部的。该游标名称仅在这个作用域内有效。在批处理、存储过程、触发器或存储过程 OUTPUT 参数中,该游标可由局部游标变量引用。OUTPUT 参数用于将局部游标传递回调用批处理、存储过程或触发器,它们可在存储过程终止后给游标变量指派参数使其引用游标。除非 OUTPUT 参数将游标传递回来,否则游标将在批处理、存储过程或触发器终止时隐性释放。如果 OUTPUT 参数将游标传递回来,游标在最后引用它的变量释放或离开作用域时释放。GLOBAL--指定该游标的作用域对连接是全局的。在由连接执行的任何存储过程或批处理中,都可以引用该游标名称。该游标仅在脱接时隐性释放。看你的要求是要read_only
还是SCROLL_LOCKS(指定确保通过游标完成的定位更新或定位删除可以成功)
还是OPTIMISTIC 指定如果行自从被读入游标以来已得到更新,则通过游标进行的定位更新或定位删除不成功