本章將介紹如何在Sybase下使用游標 因業務需要,要批量處理一些數據,sql需要用到迴圈,所以要使用游標,我寫了一個簡單的游標,sql如下 但在Sybase下執行時,一直報錯,報錯內容如下: 經過不斷排查,最後發現問題所在: 修改後的sql如下: 再次執行,妥妥的,沒毛病…… ...
本章將介紹如何在Sybase下使用游標
因業務需要,要批量處理一些數據,sql需要用到迴圈,所以要使用游標,我寫了一個簡單的游標,sql如下
DECLARE my_Cursor CURSOR FOR SELECT c_name,n_age FROM T_USER --聲明游標 OPEN my_Cursor--打開游標 DECLARE @name VARCHAR(32), @age INT --聲明兩個變數,用來接收游標的值 FETCH my_Cursor INTO @name,@age --把游標中的值賦給變數 WHILE @@SQLSTATUS = 0 BEGIN INSERT INTO T_NEW (name,age) VALUES (@name,@age) --把數據保存到另一個表 FETCH my_Cursor INTO @name,@age --把游標中下一行的值賦給變數 END CLOSE my_Cursor --關閉游標 DEALLOCATE CURSOR my_Cursor --釋放游標
但在Sybase下執行時,一直報錯,報錯內容如下:
Error (7344) DECLARE CURSOR must be the only statement in a query batch.
經過不斷排查,最後發現問題所在:
在聲明游標後,沒有任何結束標誌,Sybase下預設定義的語句沒有執行完畢,之後open游標,就會因找不到游標導致報錯。
解決方法:
在聲明游標後,添加GO標識,GO代表一段語句的終結。
修改後的sql如下:
DECLARE my_Cursor CURSOR FOR SELECT c_name,n_age FROM T_USER --聲明游標 GO --代表一段語句的終結。若沒有GO,則定義的語句沒有執行完畢,後面執行將會報錯 OPEN my_Cursor--打開游標 DECLARE @name VARCHAR(32), @age INT --聲明兩個變數,用來接收游標的值 FETCH my_Cursor INTO @name,@age --把游標中的值賦給變數 WHILE @@SQLSTATUS = 0 BEGIN INSERT INTO T_NEW (name,age) VALUES (@name,@age) --把數據保存到另一個表 FETCH my_Cursor INTO @name,@age --把游標中下一行的值賦給變數 END CLOSE my_Cursor --關閉游標 DEALLOCATE CURSOR my_Cursor --釋放游標
再次執行,妥妥的,沒毛病……