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.