Rimuoverei il punto e virgola dopo END
.
...
END
|
DELIMITER ;
Per quanto riguarda il tuo commento, non puoi utilizzare il delimitatore corrente quando dichiari un nuovo delimitatore. Sembra confuso, ma considera se lo fai:
DELIMITER |;
Ora MySQL penserebbe che il delimitatore sia "|;" (due caratteri, una pipa e un punto e virgola). Se ci pensi, DELIMITER
deve essere trattati in modo speciale dal client MySQL. È l'unica affermazione che non può essere seguito dal delimitatore corrente.
Quindi, quando imposti il delimitatore su pipe, procedi come segue:
DELIMITER |
Quando lo riporti al punto e virgola, procedi come segue:
DELIMITER ;
FWIW, ho eseguito quanto segue senza errori sul mio database di test locale su 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 ;