Musíte změnit oddělovač, abyste mohli použít ;
uvnitř funkce:
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 ;
V klient příkazového řádku MySQL
(a mnoho dalších SQL klientů) výchozí oddělovač je ;
. Takže když napíšete svůj původní kód, MySQL si myslí, že první příkaz končí tam, kde první ;
je nalezen (na řádku 5, jak uvádí chybová zpráva), takže se zobrazí chyba, protože toto není platné SQL:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Pokud změníte oddělovač na cokoliv jiného, MySQL identifikuje celý příkaz (z CREATE FUNCTION
do END
a provozuje to. Voilá! Vaše funkce je vytvořena. Nakonec, když spustíte svou funkci, kód běží v pořádku, protože tělo funkce se skládá z několika příkazů s výchozím oddělovačem.