U moet het scheidingsteken wijzigen zodat u ;
. kunt gebruiken binnen de functie:
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 ;
In MySQL Command-Line Client
(en veel andere SQL-clients) het standaard scheidingsteken is ;
. Dus wanneer u uw originele code typt, denkt MySQL dat de eerste opdracht eindigt waar de eerste ;
wordt gevonden (op regel 5, zoals de foutmelding aangeeft), dus je krijgt een foutmelding omdat dit geen geldige SQL is:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Als u het scheidingsteken in iets anders verandert, identificeert MySQL het volledige commando (van CREATE FUNCTION
tot END
en voert het uit. Voila! Uw functie is gemaakt. Ten slotte, wanneer u uw functie uitvoert, werkt de code prima omdat de hoofdtekst van de functie is samengesteld uit verschillende instructies met behulp van het standaardscheidingsteken.