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.