Du måste ändra avgränsaren så att du kan använda ;
inuti 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
(och många andra SQL-klienter) standardavgränsaren är ;
. Så när du skriver din ursprungliga kod tror MySQL att det första kommandot slutar där den första ;
hittas (på rad 5, som felmeddelandet anger), så får du ett fel eftersom detta inte är giltig SQL:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Om du ändrar avgränsaren till något annat identifierar MySQL hela kommandot (från CREATE FUNCTION
till END
och kör den. Voilá! Din funktion skapas. Slutligen, när du kör din funktion, fungerar koden bra eftersom funktionskroppen är sammansatt av flera satser med standardavgränsaren.