2017-01-24 47 views
0

私はMySQLで以下の関数を作成しました。MySQLの関数は同じ結果を返します

DELIMITER $$ 
DROP FUNCTION IF EXISTS ISICN4A; 

CREATE FUNCTION cdn(coden INT) 
RETURNS CHAR 
READS SQL DATA 
DETERMINISTIC 
BEGIN 
    DECLARE coden INT UNSIGNED DEFAULT 0; 
    DECLARE ret CHAR; 

SET ret=CASE WHEN coden<=50 then 'A' 
when coden BETWEEN 51 AND 100 then 'B'  
when coden BETWEEN 101 AND 350 then 'C' 
when coden BETWEEN 351 AND 355 then 'D' 
when coden>355 then 'E'  
ELSE NULL 
END; 

RETURN ret; 
END;$$ 

DELIMITER $$ 

あなたの種類のレビューと提案を気に入って変更してください。

答えて

0

この関数はパラメータcoden INTを受け取りますが、関数本体では、パラメータと同じ名前の変数を宣言します。

DELIMITER $$ 
DROP FUNCTION IF EXISTS ISICN4A; 

CREATE FUNCTION cdn(coden INT) RETURNS CHAR 
READS SQL DATA 
DETERMINISTIC 
BEGIN 
    DECLARE ret CHAR; 

    SET ret=CASE WHEN coden<=50 THEN 'A' 
    WHEN coden BETWEEN 51 AND 100 THEN 'B'  
    WHEN coden BETWEEN 101 AND 350 THEN 'C' 
    WHEN coden BETWEEN 351 AND 355 THEN 'D' 
    WHEN coden>355 THEN 'E'  
    ELSE NULL 
END; 

RETURN ret; 
END;$$ 
+0

どうもありがとう: あなたの関数は次のようになりますように、あなたの関数本体 からDECLARE coden INT UNSIGNED DEFAULT 0;を削除するようにしてください。これは完全に機能します。 –

関連する問題