【问题标题】:Problem with SQL Stored Function, Return ErrorSQL 存储函数有问题,返回错误
【发布时间】:2019-04-24 16:34:23
【问题描述】:
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 服务器版本相对应的手册,了解在“返回状态”附近使用的正确语法

END' 在第 20 行

这个查询看起来是正确的,这里的语法错误是什么?

【问题讨论】:

  • 尝试输入delimiter statement before the the CREATE`。 . . DELIMITER $$.
  • 如果不是endif则结束,每条语句都需要终止

标签: mysql sql database sql-function


【解决方案1】:

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

最后还要加上这个。

$$ 分隔符;

【讨论】:

  • 您的代码中存在更多问题,我认为我的回答涵盖了大部分问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多