Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - Problème avec la création d'une fonction définie par l'utilisateur (UDF)

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.