2016-10-03 98 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焦炭=情況下,當密碼子< 50則 'A' 當密碼子<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

我會建議添加'圍繞代碼,因爲它是一個關鍵字。 – CodeLikeBeaker

+0

完成,作爲傑森海涅建議 – udog

+0

我跑你的語法,但在第4行返回錯誤。 –