2013-09-04 4 views
-2
DELIMITER $$ 

CREATE FUNCTION ecmsbackoffice.getSequence($delimeter VARCHAR(20)) RETURNS VARCHAR(20) 
BEGIN 
DECLARE result VARCHAR(20); 
SET result = 0; 

IF (delimeter='B') THEN UPDATE id_generator SET seq_currval=(seq_currval+1) WHERE seq_name='B'; 
ELSE IF (delimeter='D') THEN UPDATE id_generator SET seq_currval=(seq_currval+1) WHERE seq_name='D'; 
ELSE IF (delimeter='C') THEN UPDATE id_generator SET seq_currval=(seq_currval+1) WHERE seq_name='C'; 
END IF 

SELECT seq_currval INTO result 
FROM id_generator 
WHERE seq_name = delimeter; 

RETURN result; 
END $$ 

DELIMITER ; 

Я пытаюсь создать функцию MySQL, но я получаю следующее сообщение об ошибке:Ошибка синтаксиса для функции MySQL

error code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL >server version for the right syntax to use near 'SELECT seq_currval INTO result
from id_generator
WHERE seq_name = delimeter;
R' at line 9

В чем проблема?

+3

** Проблема № 1: ** Никакой демонстрации каких-либо проблем. ** Проблема № 2: ** Не удосужился использовать форматирование кода при задании вопроса. ** Проблема № 3: ** Не прочитал страницу * help * для введения в StackOverflow. ** Проблема № 4: ** Это действительно MySQL или какой-либо другой SQL, который вы пытаетесь скопировать-вставить в качестве запроса MySQL? ** Проблема № 5: ** Вы понимаете, что пытается выполнить запрос? Чего вы пытаетесь достичь (в частности, КАК вы пытаетесь достичь этого, помните, что люди взимают почасовые ставки за кодирование, поэтому не делайте это хором/работой). ** Мой ответ: ** Синтаксическая ошибка. – BLaZuRE

+0

попробуйте это? http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query – Jianhong

+0

Возможно, вам просто не хватает полуколонки после END IF ... и поэтому mysql не делает понять следующий оператор (SELECT seq _...) –

ответ

0

Изменение ELSE IF к ELSEIF везде,

+0

oh ... !! Спасибо!!! решить проблему ~ – HoHoHo

+0

и я попытаюсь использовать эту функцию SELECT ecmsbackoffice.getSequence ('D'); , но я получаю код ошибки :( ошибки: 1054 Неизвестный столбец «разделитель» в «списке поля» еще одна просьба ... – HoHoHo

+0

Попробуйте удалить '$' здесь: 'разделитель VARCHAR (20)' – Alex

0

У вас есть три открытых if заявления и только один end if. Существует разница между else if и elseif (обратите внимание на пробел). Попробуйте это:

IF (delimeter='B') THEN UPDATE id_generator SET seq_currval=(seq_currval+1) WHERE seq_name='B'; 
ELSEIF (delimeter='D') THEN UPDATE id_generator SET seq_currval=(seq_currval+1) WHERE seq_name='D'; 
ELSEIF (delimeter='C') THEN UPDATE id_generator SET seq_currval=(seq_currval+1) WHERE seq_name='C'; 
END IF; 

Кроме того, только для справки, правильное написание, вероятно, «Разделитель», а не «разделитель».

+0

спасибо ~ !!! :) – HoHoHo

+0

и я попытаюсь использовать эту функцию SELECT ecmsbackoffice.getSequence ('D'); , но я получаю код ошибки :( ошибки: 1054 Неизвестный столбца «» в разделители «список полей» больше, пожалуйста, один ... – HoHoHo

+0

Вам не понадобится '«$»' перед именем параметра. –

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