Вы должны изменить разделитель, чтобы вы могли использовать ;
внутри функции:
DELIMITER $$
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE v_char VARCHAR(1);
DECLARE v_parseStr VARCHAR(3000) DEFAULT '';
WHILE (i <= LENGTH(prm_strInput) ) DO
SET v_char = SUBSTR(prm_strInput,i,1);
IF v_char REGEXP '^[A-Za-z0-9]$' THEN
SET v_parseStr = CONCAT(v_parseStr,v_char);
END IF;
SET i = i + 1;
END WHILE;
RETURN trim(v_parseStr);
END
$$
DELIMITER ;
Обновление: в MySQL разделителем по умолчанию является ;
. Таким образом, при вводе исходного кода MySQL думает, что первая команда заканчивается там, где найдена первая ;
(в строке 5, как указано в сообщении об ошибке), таким образом, вы получаете сообщение об ошибке, потому что это недопустимый SQL:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Если вы измените разделитель на что-то еще, MySQL идентифицирует полную команду (от CREATE FUNCTION
до END
и запускает ее. Вуаля! Ваша функция создана. Наконец, когда вы запускаете свою функцию, код работает просто отлично потому что тело функции состоит из нескольких операторов, использующих разделитель по умолчанию.