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 odelimitadorcomando.
Nem todas as versões do phpMyAdmin reconhecem odelimitercomando; em vez disso, pode-se usar oDelimitercaixa 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 usardelimiterporque 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 ... ENDbloco de instruções compostas e evite a necessidade de alterar o delimitador.