Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - Problema com a criação de função definida pelo usuário (UDF)


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.