2016-10-03 131 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行返回错误。 –