Você precisa alterar o delimitador para poder usar
;
dentro da função: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 ;
No Cliente de linha de comando MySQL (e muitos outros clientes SQL) o delimitador padrão é
;
. Então, quando você digita seu código original, o MySQL pensa que o primeiro comando termina onde o primeiro ;
é encontrado (na linha 5, como indica a mensagem de erro), assim você recebe um erro porque isso não é um SQL válido:CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Se você alterar o delimitador para qualquer outra coisa, o MySQL identifica o comando completo (de
CREATE FUNCTION
para END
e o executa. Voilá! Sua função está criada. Finalmente, quando você executa sua função, o código funciona perfeitamente porque o corpo da função é composto de várias instruções usando o delimitador padrão.