Devi cambiare il delimitatore in modo da poter usare ;
all'interno della funzione:
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 Client della riga di comando MySQL
(e molti altri client SQL) il delimitatore predefinito è ;
. Quindi, quando digiti il codice originale, MySQL pensa che il primo comando termini dove il primo ;
viene trovato (alla riga 5, come afferma il messaggio di errore), quindi ottieni un errore perché questo non è un SQL valido:
CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
RETURNS VARCHAR(3000)
DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
Se modifichi il delimitatore con qualcos'altro, MySQL identifica il comando completo (da CREATE FUNCTION
a END
e lo esegue. Ecco! La tua funzione è stata creata. Infine, quando esegui la tua funzione, il codice funziona correttamente perché il corpo della funzione è composto da diverse istruzioni che utilizzano il delimitatore predefinito.