知道为什么这段代码在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
非常感谢你!
答案 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