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 行“整数”不是公认的 CURSOR 选项。消息 155,级别 15,状态 2,过程 sum_salaries,第 7 行“整数”不是公认的 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

非常感谢您!

4

1 回答 1

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
于 2012-11-13T16:02:38.653 回答