Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Probleme beim Erstellen einer benutzerdefinierten Funktion (UDF)

Sie müssen das Trennzeichen ändern, damit Sie ; verwenden können innerhalb der Funktion:

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 ;

Im MySQL-Befehlszeilen-Client (und viele andere SQL-Clients) ist das Standardtrennzeichen ; . Wenn Sie also Ihren ursprünglichen Code eingeben, geht MySQL davon aus, dass der erste Befehl dort endet, wo der erste ; steht gefunden wird (in Zeile 5, wie in der Fehlermeldung angegeben), daher erhalten Sie einen Fehler, weil dies kein gültiges SQL ist:

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

Wenn Sie das Trennzeichen auf etwas anderes ändern, identifiziert MySQL den vollständigen Befehl (von CREATE FUNCTION bis END und führt es aus. Voilà! Ihre Funktion wird erstellt. Wenn Sie schließlich Ihre Funktion ausführen, läuft der Code problemlos, da der Funktionskörper aus mehreren Anweisungen besteht, die das Standardtrennzeichen verwenden.