简体   繁体   English

MySQL 语法(函数)错误

[英]MySQL syntax (function) is error

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

Every statement in a procedure must end with ;过程中的每个语句都必须以;结尾; . . To keep this from ending the function definition, use the DELIMITER command to change the command delimiter to something else.为了避免结束函数定义,请使用DELIMITER命令将命令分隔符更改为其他内容。

And when doing a variable assignment in a SELECT clause, you have to use := .SELECT子句中进行变量赋值时,必须使用:=

There's no AS at the beginning of a function definition.函数定义的开头没有AS

You don't declare variables that begin with @ .您不声明以@开头的变量。

You need THEN and END IF in an IF statement.您需要在IF语句中使用THENEND IF

To concatenate strings, use CONCAT() , not + .要连接字符串,请使用CONCAT() ,而不是+

You have the arguments to CONVERT() in the wrong order, and VARCHAR(3) is not a valid type argument, it should be CHAR(3) .您的CONVERT()参数顺序错误,并且VARCHAR(3)不是有效的类型参数,它应该是CHAR(3)

In a function, you can't use a SELECT statement at the top-level, because that means to return the result set, and functions can only return single values.在函数中,不能在顶层使用SELECT语句,因为这意味着返回结果集,而函数只能返回单个值。 So you have to assign @MAX from a (SELECT ...) expression.所以你必须从(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 ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM