Sybase_遊標

本章將介紹如何在Sybase下使用遊標sql

因業務須要,要批量處理一些數據,sql須要用到循環,因此要使用遊標,我寫了一個簡單的遊標,sql以下spa

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下執行時,一直報錯,報錯內容以下:code

Error (7344) DECLARE CURSOR must be the only statement in a query batch.

通過不斷排查,最後發現問題所在:blog

在聲明遊標後,沒有任何結束標誌,Sybase下默認定義的語句沒有執行完畢,以後open遊標,就會因找不到遊標致使報錯。
解決方法:
在聲明遊標後,添加GO標識,GO表明一段語句的終結。

修改後的sql以下:class

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 --釋放遊標

再次執行,妥妥的,沒毛病……變量

相關文章
相關標籤/搜索