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行
此查询看起来正确,这里的语法错误是什么?
答案 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
,因为它并不是真正需要的。