【问题标题】:MySQL syntax (function) is errorMySQL 语法(函数)错误
【发布时间】:2016-05-08 07:09:58
【问题描述】:
CREATE FUNCTION FC_IDKRITERIA()
RETURNS CHAR(3)
AS
BEGIN
DECLARE @MAX INT , @KODEBARU CHAR(3)  
SELECT @MAX = MAX (RIGHT(IDKRITERIA,2)) FROM KRITERIA
IF @MAX IS NULL 
SET @MAX = 0
SET @KODEBARU = 'K' + RIGHT('0'+CONVERT(VARCHAR(3),@MAX+ 1 ) ,2)
RETURN @KODEBARU
END

【问题讨论】:

  • 您在每个语句的末尾缺少;

标签: mysql function syntax-error


【解决方案1】:

过程中的每条语句都必须以; 结尾。为了避免结束函数定义,请使用DELIMITER 命令将命令分隔符更改为其他内容。

SELECT 子句中进行变量赋值时,您必须使用:=

函数定义的开头没有AS

您不要声明以@ 开头的变量。

您需要在 IF 语句中使用 THENEND IF

要连接字符串,请使用CONCAT(),而不是+

CONVERT() 的参数顺序错误,VARCHAR(3) 不是有效的类型参数,它应该是 CHAR(3)

在函数中,不能在顶层使用SELECT 语句,因为这意味着返回结果集,而函数只能返回单个值。所以你必须从(SELECT ...) 表达式中分配@MAX

DELIMITER $$

CREATE FUNCTION FC_IDKRITERIA() RETURNS CHAR(3)
BEGIN
    SET @MAX = (SELECT MAX (RIGHT(IDKRITERIA,2)) FROM KRITERIA);
    IF @MAX IS NULL 
    THEN SET @MAX = 0;
    END IF;
    SET @KODEBARU = CONCAT('K', RIGHT('0'+CONVERT(@MAX+ 1, CHAR(3)) ,2));
    RETURN @KODEBARU;
END;
$$
DELIMITER ;

【讨论】:

  • ++ 不错。同样作为咨询:在将他的投票插入Votes 表之前,我需要检查用户的声誉。那么我应该在 Database-side (by a trigger)Server-side 中这样做 (checking) i>(在用户登录时获取用户的代表并将其设置为会话,然后使用该会话进行检查)?
  • @Shafizadeh 你的问题有答案:stackoverflow.com/questions/37096493/…
  • 是的,你是对的..!谢谢你的关注。顺便说一句,我真的坚持this problem。老实说,我很尴尬再次 ping 你。但我保证这是最后一个。因此,如果您有空闲时间,请看一下。
  • 您还有很多其他语法错误,我已在更新的答案中全部修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 2016-08-23
  • 2020-01-12
  • 2022-01-12
  • 2021-01-19
相关资源
最近更新 更多