有什么问题w / MySql语句(功能)

时间:2017-04-17 11:28:34

标签: mysql function

我正在使用MySql57 这个脚本出了什么问题?(我是Mysql新手) 错误代码:1064。您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'='A0001'附近使用正确的语法; ELSE BEGIN gubun1 = LEFT(cur_max,0,1); gu'在第10行

DELIMITER $$
CREATE FUNCTION narae.FN_GET_GUBUN_MAX() RETURNS varchar(100)
BEGIN
DECLARE cur_max varchar(100);
DECLARE gubun1 varchar(1);
DECLARE gubun2 varchar(100);
DECLARE RTN_VAL varchar(100);

SELECT IFNULL(MAX(gubun_code),'A0001') INTO cur_max from gubun_code;   

IF cur_max = 'A0001' THEN RTN_VAL = 'A0001';
ELSE 
    BEGIN
        gubun1 = LEFT(cur_max,0,1);
        gubun2 = 
LPAD(CONVERT(CONVERT(RIGHT(cur_max,4),UNSIGNED)+1,CHAR),4,'0');
RTN_VAL = CONCAT(gubun1,gubun2);
END
RETURN RTN_VAL;
END $$
DELIMITER ;

1 个答案:

答案 0 :(得分:0)

该功能有几处错误。我认为这可能有用:

DELIMITER $$
CREATE FUNCTION narae.FN_GET_GUBUN_MAX() RETURNS varchar(100)
BEGIN
    DECLARE v_cur_max varchar(100);
    DECLARE v_RTN_VAL varchar(100);

    SELECT COALESCE(MAX(gubun_code), 'A0001')
    INTO v_cur_max 
    FROM gubun_code;   

    IF cur_max = 'A0001' THEN
        SET v_RTN_VAL = 'A0001';
    ELSE
        SET v_RTN_VAL = CONCAT(LEFT(cur_max, 1), RIGHT(cur_max, 4) + 1);
    END IF;
    RETURN v_RTN_VAL;
END $$
DELIMITER ;

我会通过执行SQL语句中的所有逻辑来进一步简化这一过程,但这似乎符合您的解决方案。