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

事前にどうもありがとうございました!

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 に答える