sql >> Database teknologi >  >> RDS >> Mysql

MySQL - Problemer med at oprette brugerdefineret funktion (UDF)

Du skal ændre afgrænsningen, så du kan bruge ; inde i funktionen:

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 ;

I MySQL Command-Line Client (og mange andre SQL-klienter) standardafgrænseren er ; . Så når du skriver din originale kode, tror MySQL, at den første kommando ender, hvor den første ; findes (på linje 5, som fejlmeddelelsen angiver), så får du en fejl, fordi dette ikke er gyldig SQL:

CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
  DECLARE i INT DEFAULT 1;

Hvis du ændrer afgrænseren til noget andet, identificerer MySQL den komplette kommando (fra CREATE FUNCTION til END og kører den. Voilá! Din funktion er oprettet. Endelig, når du kører din funktion, kører koden fint, fordi funktionsteksten er sammensat af flere sætninger ved hjælp af standardafgrænseren.



  1. mysql CONCAT () AS navn?

  2. mysqldump virker ikke i crontab

  3. Gør databaseresultatet til array

  4. DROP TABEL HVIS FINNES i SQLite