Vous devez changer le délimiteur pour pouvoir utiliser ;
à l'intérieur de la fonction :
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 ;
Dans MySQL Command-Line Client
(et de nombreux autres clients SQL) le délimiteur par défaut est ;
. Ainsi, lorsque vous tapez votre code d'origine, MySQL pense que la première commande se termine là où le premier ;
est trouvé (à la ligne 5, comme l'indique le message d'erreur), vous obtenez donc une erreur car ce n'est pas un SQL valide :
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Si vous remplacez le délimiteur par autre chose, MySQL identifie la commande complète (à partir de CREATE FUNCTION
à END
et l'exécute. Voilà! Votre fonction est créée. Enfin, lorsque vous exécutez votre fonction, le code s'exécute correctement car le corps de la fonction est composé de plusieurs instructions utilisant le délimiteur par défaut.