Conforme documentado em Definindo programas armazenados :
Se você usa o mysql programa cliente para definir um programa armazenado contendo caracteres de ponto e vírgula, surge um problema. Por padrão, mysql ele mesmo reconhece o ponto e vírgula como um delimitador de instrução, então você deve redefinir o delimitador temporariamente para fazer com que mysql para passar toda a definição do programa armazenado para o servidor.
O mesmo vale para o phpMyAdmin.
Para redefinir o mysql delimitador, use odelimitador
comando.
Nem todas as versões do phpMyAdmin reconhecem odelimiter
comando; em vez disso, pode-se usar oDelimiter
caixa de entrada abaixo da caixa de entrada SQL:veja Como escrevo um SP no phpMyAdmin (MySQL)?
Veja a seguir um exemplo de uma função que recebe um parâmetro, executa uma operação usando uma função SQL e retorna o resultado. Neste caso, não é necessário usardelimiter
porque a definição da função não contém;
interno delimitadores de instruções:
mysql>
CREATE FUNCTION hello (s CHAR(20))
mysql>RETURNS CHAR(50) DETERMINISTIC
->RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)
No seu caso, você pode remover oBEGIN ... END
bloco de instruções compostas e evite a necessidade de alterar o delimitador.