Cita: me funciono muy bien quitando unicamente el begin y el end
Porque tienes una sola sentencia en el SP. Si necesitases dos o más ya tienes que usar BEGIN/END y usar DELIMITER para poder meterlo por consola o script.
Respecto del otro, un SP no produce una salida que sea válida para un LAST_INSERT_ID(). El parámetro que espera la función es un entero, y un SP no lo genera.
Un SP sólo puede devolver datos en parámetros o bien como tabla resultado (aunque tenga un sólo campo), pero una tabla no es un parámetro válido para LAST_INSERT_ID().