游标在MySQL中出错

时间:2018-04-26 06:20:45

标签: mysql sql database

我在下一个脚本中有下一个错误,游标在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 ;

4 个答案:

答案 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)

结束后请使用分号