PayPal订单出现间歇性问题,我一直在深入研究代码。我们得到一个异常,在特定的存储过程中说“等待操作超时”。在存储过程中,我可以看到声明了一个名为item_cursor
的游标,稍后打开但它永远不会关闭。存储过程只是在没有调用close item_cursor
(或DEALLOCATE item_cursor
)的情况下结束。
我是一个前端开发者而不是后端,所以我有点超出了我的深度,但这可能导致问题吗?
答案 0 :(得分:4)
这取决于cursor is declared:
的方式LOCAL
指定游标范围对于创建游标的批处理,存储过程或触发器是本地的。游标名称仅在此范围内有效。 ... 当批处理,存储过程或触发器终止时,将隐式释放游标,除非光标在OUTPUT参数中传回。如果它在OUTPUT参数中传回,则当引用它的最后一个变量被释放或超出范围时,游标将被释放。
GLOBAL
指定游标的范围是连接的全局范围。游标名称可以在连接执行的任何存储过程或批处理中引用。 仅在断开连接时隐式释放游标。
(我强调)
然后继续说明如果没有指定默认选项,它会如何选择默认值,但如果您未更改系统中的任何其他内容,默认情况下它将为GLOBAL
,在这种情况下意味着那是的,它会"泄漏"。如果光标持有任何锁定,它将继续保持这些锁定,直到您的连接断开连接。