我在下一个脚本中有下一个错误,游标在MySQL中。 “脚本行:4您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以获得正确的语法,使用'声明c_salari游标从empleados选择salario;
打开c_salari;
在第10行' “
DELIMITER $$
DROP FUNCTION IF EXISTS `empresa`.`EmpleatsRang` $$
CREATE FUNCTION `empresa`.`EmpleatsRang` (valor_inicial int, valor_final int) RETURNS INT
BEGIN
declare i int default 0;
declare resultat int default 0;
declare totalemp int;
declare v_salario int;
declare c_salari cursor for select salario from empleados;
select count(*) into totalemp from empleados;
open c_salari;
while i<totalemp do
fetch c_salari into v_salario;
if salari >= valor_inicial and salari <= valor_final then
resultat=resultat+1;
end if;
i=i+1;
end while;
close c_salari;
return resultat;
END $$
DELIMITER ;
答案 0 :(得分:2)
所有声明语句应该在开始之后和任何选择之前。 所以写
Declare c_salari cursor for select salario from empleados;
之前
select count(*) into totalemp from empleados;
答案 1 :(得分:1)
这是因为我没有将set置于变量“i”和变量“resultat”
while i<totalemp do
fetch c_salari into v_salario;
if salari >= valor_inicial and salari <= valor_final then
set resultat=resultat+1; /*Need set*/
end if;
set i=i+1; /*Need set*/
end while;
答案 2 :(得分:0)
不要将游标用于这么简单的任务。改为使用SELECT。
select count(salario)
from empleados
where salari >= valor_inicial and salari <= valor_final
经验法则说:如果可能,请使用一个SQL语句。如果没有,请使用更多SQL语句。光标是最后一个选项,它会杀死DBMS性能。
答案 3 :(得分:0)
结束后请使用分号