Desde o
DECLARE workval bigint(20);
line é a primeira com um ponto e vírgula no final, suspeito que você esqueceu de alterar o delimitador antes de inserir o código da função (embora isso dependa do cliente que você está usando). Tente alterar seu código para:
DELIMITER #
CREATE FUNCTION nextval (seq_name varchar(100))
...
END#