Musisz zmienić ogranicznik, aby móc używać ;
wewnątrz funkcji:
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 ;
W kliencie wiersza poleceń MySQL
(i wielu innych klientów SQL) domyślnym ogranicznikiem jest ;
. Tak więc, kiedy wpisujesz swój oryginalny kod, MySQL myśli, że pierwsze polecenie kończy się w miejscu pierwszego ;
zostanie znaleziony (w wierszu 5, zgodnie z komunikatem o błędzie), więc otrzymujesz błąd, ponieważ nie jest to prawidłowy SQL:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Jeśli zmienisz ogranicznik na cokolwiek innego, MySQL zidentyfikuje kompletne polecenie (od CREATE FUNCTION
do END
i uruchamia go. Voila! Twoja funkcja została utworzona. Wreszcie, kiedy uruchamiasz swoją funkcję, kod działa dobrze, ponieważ treść funkcji składa się z kilku instrukcji używających domyślnego ogranicznika.