2017-04-17 15 views
1

私はMySql57を使用しています このスクリプトには何が問題なのですか?(私はMySQLの初心者です) エラーコード:1064. SQL構文にエラーがあります。正しい構文が '=' A0001 'の近くで使用されるようにMySQLサーバのバージョンに対応するマニュアルを確認してください。 ELSE BEGIN gubun1 = LEFT(cur_max、0,1); gu 'on line 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 ; 
+0

'set'を試してみてください。 –

+0

THEN SET RTN_VAL = 'A0001'を試してください。ちょうどその代わりに –

答えて

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文ですべてのロジックを実行して、これを単純化するだろうが、これはあなたのソリューションの精神であると思われます。

+0

ありがとう。私は問題を解決する。 ^。^ – SmithBaek

関連する問題