SQL存储函数问题,返回错误

时间:2019-04-24 16:34:23

标签: mysql sql database sql-function

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 :(得分:0)

问题是我写了ENDIF而不是“ END IF”

最后也要添加它。

$$ 分隔符;

答案 1 :(得分:0)

  

如果不是endif,则结束,并且每个语句都需要终止

P.Salmon在回答问题时已经发表了评论。

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,因为它并不是真正需要的。