Ошибка с курсором в MySQL - PullRequest
       5

Ошибка с курсором в MySQL

0 голосов
/ 26 апреля 2018

У меня следующая ошибка в следующем скрипте с курсором в MySQL.Строка сценария: 4 У вас есть ошибка в вашем синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MySQL, для использования рядом с полем 'объявления курсора c_salari для выбора salario из empleados;

open 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 голосов
/ 26 апреля 2018

используйте точку с запятой после конца, в то время как

0 голосов
/ 26 апреля 2018

Все операторы объявления должны начинаться после самого начала и перед любым выбором.так что пишите

Declare c_salari cursor for select salario from empleados; 

перед

select count(*) into totalemp from empleados;
0 голосов
/ 26 апреля 2018

Это было из-за того, что я не помещал набор в переменную "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;
0 голосов
/ 26 апреля 2018

Не используйте курсор для такой простой задачи.Вместо этого используйте SELECT.

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

Практическое правило гласит: если это возможно, используйте один оператор SQL.Если нет, используйте больше операторов SQL.Курсор является последним вариантом и убивает производительность СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...