2016-10-03 3 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; 

Это дает мне ошибку, как:

в Declare отставке полукокса = случай, когда CODEN < 50 затем 'A', когда 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, так как это ключевое слово. – CodeLikeBeaker

+0

Сделано, как предложил Джейсон Гейне – udog

+0

Я запустил ваш синтаксис, но вернулся с ошибкой в ​​строке 4. –

Смежные вопросы