2012-11-13 63 views
0

任何想法爲什麼這個代碼不能在Sql Server中工作嗎?光標練習不起作用

CREATE PROCEDURE sum_salaries(OUT sum INTEGER) 
    LANGUAGE SQL 
    BEGIN 
    DECLARE p_sum INTEGER; 
    DECLARE p_sal INTEGER; 
    DECLARE c CURSOR FOR SELECT SALARY FROM EMPLOYEE; 
    DECLARE SQLSTATE CHAR(5) DEFAULT '00000'; 

    SET p_sum = 0; 

    OPEN c; 

    FETCH FROM c INTO p_sal; 

    WHILE(SQLSTATE = '00000') DO 
     SET p_sum = p_sum + p_sal; 
     FETCH FROM c INTO p_sal; 
    END WHILE; 

    CLOSE c; 

    SET sum = p_sum; 

    END% 

它給所有類型的錯誤:

消息102,級別15,狀態1,過程sum_salaries,3號線錯誤 附近的語法 'OUT'。消息155,級別15,狀態2,過程sum_salaries, 行6'INTEGER'不是可識別的CURSOR選項。消息155,15級, 狀態2,過程sum_salaries,行7'INTEGER'不是一個可識別的 CURSOR選項。消息155,級別15,狀態2,過程sum_salaries, 第9行'CHAR'不是可識別的CURSOR選項。消息102,級別15, 狀態1,過程sum_salaries,第15行 'p_sal'附近的語法不正確。消息102,級別15,狀態1,過程sum_salaries,行17 'DO'附近的語法錯誤。消息102,級別15,狀態1,過程 sum_salaries,第19行'p_sal'附近的語法錯誤。消息102,級別 15,狀態1,過程sum_salaries,第24行 '='附近的語法不正確。

另外,如果你能指點充足的文/現場教導如何使用遊標,這將是巨大的。此示例取自:http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=%2Fcom.ibm.db2.luw.apdv.routines.doc%2Fdoc%2Fc0024361.html&resultof=%22%63%75%72%73%6f%72%22%20

非常感謝您提前!

+2

這不是T-SQL。此代碼不是爲SQL Server設計的。 – njr101

+0

那些(DB2)文檔的SqlServer版本:http://msdn.microsoft.com/zh-cn/library/ms181441.aspx –

回答

2

你不需要光標做

create procedure sum_salaries 
(
    @sum int output 
) 
as 
begin 
    select @sum = sum(salary) from employee 
end 

但是,如果你想使用遊標,嘗試

create procedure sum_salaries 
(
    @sum int output 
) 
as 
begin 
    declare @p_sum int, @p_sal int 

    declare c cursor for 
     select salary from employee 

    set @p_sum = 0 

    open c 

    fetch from c into @p_sal 

    while @@fetch_status = 0 
    begin 
     set @p_sum = @p_sum + @p_sal 
     fetch from c into @p_sal 
    end 

    close c 
    deallocate c 

    set @sum = @p_sum 
end