Usunąłbym średnik po END
.
...
END
|
DELIMITER ;
Jeśli chodzi o Twój komentarz, nie możesz użyć obecnego ogranicznika podczas deklarowania nowego ogranicznika. Brzmi to mylące, ale zastanów się, czy to zrobisz:
DELIMITER |;
Teraz MySQL pomyślałby, że ogranicznik to „|;” (dwa znaki, rura i średnik). Jeśli się nad tym zastanowisz, DELIMITER
musi być traktowane w specjalny sposób przez klienta MySQL. To jedyne stwierdzenie, którego nie można po którym następuje bieżący ogranicznik.
Dlatego ustawiając ogranicznik na potok, zrób tak:
DELIMITER |
Gdy ustawiasz go z powrotem na średnik, zrób tak:
DELIMITER ;
FWIW, uruchomiłem następujące bez błędów w mojej lokalnej testowej bazie danych w 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 ;