mysql中的游标错误

omqzjyyz  于 2021-06-24  发布在  Mysql
关注(0)|答案(4)|浏览(325)

我在mysql中使用cursor的下一个脚本中遇到了下一个错误。”脚本行:4您的sql语法有错误;查看与您的mysql服务器版本相对应的手册,以了解使用“declare c\u salari cursor for select salario from empleados”附近的正确语法;
打开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 ;
0g0grzrc

0g0grzrc1#

这是因为我没有把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;
fiei3ece

fiei3ece2#

所有declare语句都应该在begin本身之后,任何select语句之前。所以写吧

Declare c_salari cursor for select salario from empleados;

之前

select count(*) into totalemp from empleados;
cdmah0mi

cdmah0mi3#

结束时请用分号

t40tm48m

t40tm48m4#

不要将光标用于这样简单的任务。改用select。

select count(salario)
from empleados
where salari >= valor_inicial and salari <= valor_final

经验法则是:如果可能的话,使用一条sql语句。如果不是,请使用更多sql语句。游标是最后一个选项,它会降低dbms的性能。

相关问题