Depuis le DECLARE workval bigint(20);
ligne est la première avec un point-virgule à la fin, je soupçonne que vous avez oublié de changer le délimiteur avant de saisir le code de la fonction (bien que cela dépende du client que vous utilisez).
Essayez de remplacer votre code par :
DELIMITER #
CREATE FUNCTION nextval (seq_name varchar(100))
...
END#