Трябва да промените разделителя, за да можете да използвате ;
вътре във функцията:
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 ;
В MySQL клиент на командния ред
(и много други SQL клиенти) разделителят по подразбиране е ;
. Така че, когато въвеждате оригиналния си код, MySQL смята, че първата команда завършва там, където първата ;
е намерен (на ред 5, както гласи съобщението за грешка), по този начин получавате грешка, защото това не е валиден SQL:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Ако промените разделителя на нещо друго, MySQL идентифицира пълната команда (от CREATE FUNCTION
до END
и го управлява. Voilá! Вашата функция е създадена. И накрая, когато стартирате функцията си, кодът работи добре, защото тялото на функцията се състои от няколко израза, използващи разделителя по подразбиране.