Você está perdendo o delimitador definição antes e depois da definição do proc armazenado:
Como a definição e o corpo do proc armazenado estavam ok, o chack de sintaxe deu a você a aprovação, mas o código não seria executado corretamente em seu cliente.
Use o seguinte esqueleto para definir um procedimento armazenado:
delimiter //
create procedure ...
...
end
//
delimiter ;