sybase中cursor的使用中死迴圈問題解決
今天發現居然出了個死迴圈.奇怪呀.
修改了一下while迴圈的條件.
while @@sqlstatus=0
發現報瞭如下錯誤:
582 : 0 : Number (582) Severity (16) State (3) Server (t10) Procedure (sms_clear_pre_sub) 遊標'cur_pack_fail_b'被隱式地關閉,原因是當前遊標位置由於更新或刪除而被刪除。遊標掃描位置不能恢復。這發生在對一張以上的表引用的時候。 (24000)
559 : 0 : Number (559) Severity (16) State (1) Server (t10) Procedure (sms_clear_pre_sub) 試圖使用未開啟的遊標'cur_pack_fail_b'。使用系統儲存過程sp_cursorinfo來得到更多資訊。 (24000)
仔細研究一下這個遊標
定義:
declare cur_pack_fail_b cursor for
select a.PACKAGE_ID
from SMS_SUBSCRIBE_STATUS a,xsmp.dbo.XSRV_APPLICATION_PACK_MAP b
where a.DEST_MSISDN=@dest_user
and a.APPLICATION_ID=b.APPLICATION_ID
and b.PACK_ID=@packid
and a.PACKAGE_ID>0
使用的時候是針對每個PACKAGE_ID 把SMS_SUBSCRIBE_STATUS表中的做了處理並刪除.
仔細看了一下,發現問題了.根據這個遊標,可以得到若干個完全相同的PACKAGE_ID,但是第一次迴圈的時候就刪除了,再一次迴圈的時候就出問題了.針對剛才的錯誤提示資訊,分析一下,明白了.加一個distinct就ok了.之前測試的時候測試的不完全,所以出了這個問題.
declare cur_pack_fail_b cursor for
select distinct a.PACKAGE_ID
from SMS_SUBSCRIBE_STATUS a,xsmp.dbo.XSRV_APPLICATION_PACK_MAP b
where a.DEST_MSISDN=@dest_user
and a.APPLICATION_ID=b.APPLICATION_ID
and b.PACK_ID=@packid
and a.PACKAGE_ID>0
覺得sybase的遊標做的太差,不如oracle.oracle使用for迴圈不用宣告那麼多變數,結構也簡單易用.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/47869/viewspace-900958/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何在 iOS 中解決迴圈引用的問題iOS
- 【FastJSON】解決FastJson中“$ref 迴圈引用”的問題ASTJSON
- Ubuntu16.04使用者登入介面死迴圈問題的解決Ubuntu
- 解決Sybase ASE中的dbisql (interactive sql)和Sybase SQL Anywhere中的dbisql相互打架問題SQL
- FastJson中迴圈引用的問題ASTJSON
- Swift中的迴圈強引用 【使用無主引用解決】Swift
- JavaScript 中 for in 迴圈和陣列的問題JavaScript陣列
- 多執行緒下HashMap的死迴圈問題執行緒HashMap
- CKEditor使用中遇到的問題解決
- 多執行緒 HashMap 死迴圈 問題解析執行緒HashMap
- 雲端計算運維學習---Nginx服務中rewrite引數的死迴圈問題運維Nginx
- Josephus問題解決方法四(迴圈陣列)陣列
- 無限for迴圈(死迴圈)
- 迴圈中的非同步&&迴圈中的閉包非同步
- Kotlin 中的迴圈全解Kotlin
- 深入瞭解 JavaScript 中的 for 迴圈JavaScript
- 緊湊迴圈中無法發生goroutine排程的問題終於要解決了Go
- cmd執行python死迴圈怎麼解決Python
- Flask中的迴圈引用/匯入問題演示以及解決方案 | 藍圖的使用與解析 | 藍圖額外用法Flask
- 【Spring】Spring中的迴圈依賴及解決Spring
- Mysql使用kill命令解決死鎖問題MySql
- 怎麼解決引用計數 GC 的迴圈引用問題?GC
- 狀態模式中迴圈呼叫子元件時遇到的問題模式元件
- 關於寫死namespace與攔截器結合使用導致死迴圈的問題namespace
- “迴圈賽日程安排”問題的分而治之解決演算法演算法
- sql使用cursor寫一個簡單的迴圈<轉>SQL
- 解決hibernate雙向關係造成的一方重複執行SQl,或者死迴圈的問題SQL
- Spring 迴圈依賴的三種方式(三級快取解決Set迴圈依賴問題)Spring快取
- JavaScript中的while迴圈JavaScriptWhile
- 理解 JavaScript 中的迴圈JavaScript
- Redis 中的事件迴圈Redis事件
- Node中的事件迴圈事件
- HashMap死迴圈的原因分析HashMap
- 解決迴圈引用
- [譯] 減少 Python 中迴圈的使用Python
- python面試題之“該死的for迴圈系列”(二)Python面試題
- goland中npm無法使用的問題及解決方法GoLandNPM
- Amigo學習(一)解決使用中遇到的問題Go