光标练习不起作用

时间:2012-11-13 15:57:21

标签: sql sql-server-2008 cursor

知道为什么这段代码在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选项。 Msg 155,Level 15,   状态2,程序sum_salaries,第7行'INTEGER'不是公认的   CURSOR选项。消息155,级别15,状态2,程序sum_salaries,   第9行'CHAR'不是公认的CURSOR选项。 Msg 102,Level 15,   状态1,过程sum_salaries,第15行附近的语法不正确   'p_sal'。消息102,级别15,状态1,程序sum_salaries,第17行   'DO'附近的语法不正确。消息102,级别15,状态1,过程   sum_salaries,第19行'p_sal'附近的语法不正确。 Msg 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

非常感谢你!

1 个答案:

答案 0 :(得分: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