Eu removeria o ponto e vírgula após
END
. ...
END
|
DELIMITER ;
No seu comentário, você não pode usar o delimitador atual ao declarar um novo delimitador. Isso parece confuso, mas considere se você fizer isso:
DELIMITER |;
Agora o MySQL pensaria que o delimitador é "|;" (dois caracteres, uma barra vertical e um ponto e vírgula). Se você pensar sobre isso,
DELIMITER
deve ser tratado de forma especial pelo cliente MySQL. É a única afirmação que não pode ser seguido pelo delimitador atual. Então, ao configurar o delimitador para pipe, faça o seguinte:
DELIMITER |
Ao configurá-lo de volta para ponto e vírgula, faça o seguinte:
DELIMITER ;
FWIW, executei o seguinte sem erro no meu banco de dados de teste local no MySQL 5.0.75:
DROP FUNCTION IF EXISTS PersonName;
DELIMITER |
CREATE FUNCTION PersonName( personID SMALLINT )
RETURNS CHAR(20)
BEGIN
DECLARE pname CHAR(20) DEFAULT '';
SELECT name INTO pname FROM family WHERE ID=personID;
RETURN pname;
END
|
DELIMITER ;