2016-10-03 4 views
2

私はMS SQLのスカラー値関数をMySQLで機能させるために移行しようとしていますが、クエリとして次の構文を使用してxx4という名前の関数を作成しています。mysqlは可変構文エラーを宣言します

DROP FUNCTION IF EXISTS `xx4`;` 
CREATE DEFINER = CURRENT_USER FUNCTION `xx4`(code VARCHAR(3))` 
RETURNS CHAR` 
BEGIN 
`DECLARE coden INT UNSIGNED DEFAULT 0= CAST(CODE AS UNSIGNED)` 
    `DECLARE ret CHAR =CASE` 
    `when coden<50 then 'A'` 
    `when coden<100 then 'B'` 
    `when coden<350 then 'C'` 
    `when coden<360 then 'D'` 
    `else null` 
`END` 
`RETURN ret` 
`END; 

それはと私にエラーを与える:宣言RETの文字で

=ケースときにCODEN < 50行で '' CODEN < 100ワット、4」

をすることができます私が間違っている場所を教えてください。あなたの助けに感謝。

+0

私は構文は 'のあまりに多くの記号で表示されることがさらに編集が必要だと思います。 –

+0

'default 0 ='?それは何であるはずですか? 'coden'を' 0 = cast(...) 'のブーリアン結果にしようとしていますか?デフォルト値は式にすることはできません。 –

答えて

1

私は(あなたのセミコロンを気に)非常に多くのバッククォートがある理由はわからないんだけど、次の構文の作品:

DROP FUNCTION IF EXISTS xx4; 

DELIMITER $$ 

CREATE DEFINER = CURRENT_USER FUNCTION xx4(`code` VARCHAR(3)) 
RETURNS CHAR 
BEGIN 
DECLARE coden INT UNSIGNED DEFAULT 0 = CAST(`CODE` AS UNSIGNED); 

    DECLARE ret CHAR; 

    set ret = CASE 
    when coden<50 then 'A' 
    when coden<100 then 'B' 
    when coden<350 then 'C' 
    when coden<360 then 'D' 
    else null  
    END; 

RETURN ret; 
END;$$ 

DELIMITER ; 
+0

私はそれをキーワードとして 'around around 'を追加することをお勧めします。 – CodeLikeBeaker

+0

完了しました.Jason Heineが提案しました – udog

+0

構文を実行しましたが、4行目にエラーが返されます。 –

関連する問題