Проблема с хранимой функцией SQL, ошибка возврата - PullRequest
0 голосов
/ 24 апреля 2019
CREATE FUNCTION salarystatus(employee_id integer) RETURNS VARCHAR(25)
DETERMINISTIC
BEGIN

   DECLARE isalary DECIMAL(8,2);
   DECLARE istatus varchar(25);

        SELECT salary INTO isalary 
        FROM employees
        WHERE employee_id = salarystatus.employee_id;

    IF (isalary < 50000) then
        SET istatus = 'low income';
    ELSEIF (50000 <= isalary < 80000) then
        SET istatus = 'medium income';
    ELSE 
        SET istatus = 'high income';
    ENDIF

    RETURN istatus

END

Возврат этой ошибки:

1064 - у вас ошибка в синтаксисе SQL;обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с 'RETURN istatus

END' в строке 20

Этот запрос выглядит правильно, что является ошибкой синтаксисаздесь

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Конец, если не конец, и каждое утверждение должно быть прекращено

П.Салмон уже прокомментировал, когда я делал ответ на него.

DELIMITER $$

CREATE FUNCTION
 # best to prefix with in_ so MySQL and you cant mix it up with existing columns
 salarystatus (in_employee_id INTEGER)
RETURNS VARCHAR(25)
BEGIN
  DECLARE isalary DECIMAL(8,2) DEFAULT NULL; # <- best to have a default value
  DECLARE istatus varchar(25)  DEFAULT NULL; # <- best to have a default value

  SELECT salary
  INTO isalary 
  FROM employees
  WHERE employee_id = in_employee_id.employee_id; #<- use the function in param

  IF (isalary < 50000) then
    SET istatus = 'low income';
  ELSEIF (50000 <= isalary < 80000) then
    SET istatus = 'medium income';
  ELSE 
    SET istatus = 'high income';
  END IF; # <- semicon (;) missing in your query also ENDIF isnt valid syntax. 

  RETURN istatus;
END

DELIMITER ;

Также я удаляю DETERMINISTIC, потому что это действительно не нужно.

0 голосов
/ 24 апреля 2019

Проблема в том, что я написал ENDIF вместо "END IF"

И добавьте это в конце.

$$ DELIMITER;

...