【发布时间】:2016-06-01 10:16:48
【问题描述】:
我刚刚遇到了 ASE(版本 15.7 ESD 15.2)使用更新游标的奇怪行为。
最后我找到了根本原因,但我想把它贴在这里,因为它很有用,也许有人已经遇到过。
我写了这个简单的“更新”光标:
DECLARE c_contactrule
CURSOR FOR
SELECT a.id
FROM FTContactRule a, Client b, ClientContact c
WHERE /* join conditions */
AND a.client_id IN ( bla bla bla )
AND a.message_subtype_id ( bla bla bla )
AND /* and so on */
for update of a.preferred_medium_id
go
(我对这篇文章的查询进行了一些总结,以提高可读性)
当然,以后我会一直读取光标值直到结束。
open c_contactrule
fetch c_contactrule into @rule_to_update
while @@sqlstatus = 0
begin
/* do something */
end
close c_contactrule
deallocate c_contactrule
go
我想你猜到了某个地方有一个update preferred_medium_id where current of
目前,这个查询以一种非常具体的方式崩溃:抛出的消息是“ASE 终止了这个进程”,事实上,他杀死了我的会话!
调查,我发现错误的代码行是第一个fetch into语句。
【问题讨论】:
标签: crash cursor sybase sap-ase