MySQL - Procedures com várias tabelas

Quando uso a PROCEDURE Não retorna o último ID do Funcionario…que desejo cadastrar…

CREATE DEFINER=root@localhost PROCEDURE sp_func_save(

pnome_completo VARCHAR(90),
pgenero VARCHAR(9),
pdata_nascimento DATE,
pmorada VARCHAR(90),
pnome_pai VARCHAR(90),
pnome_mae VARCHAR(90),

ptelefone01 INT,
ptelefone02 INT,
pemail VARCHAR (80),

pdata_contrato DATE,
pcarga_horaria MEDIUMTEXT,
pespecialidade VARCHAR(90),
pid_Categoria INT,

pusuario VARCHAR (35),
psenha VARCHAR (226),
pnivel TINYINT(4)

)
BEGIN

DECLARE vidpessoa INT;
DECLARE vidfuncionario INT;


INSERT INTO Pessoa (nome_completo, genero, data_nascimento, morada, nome_Pai, nome_Mae) 
VALUES (pnome_completo, pgenero, pdata_nascimento, pmorada, pnome_pai, pnome_mae);

SET vidpessoa = LAST_INSERT_ID(); 

INSERT INTO Contacto (id_Pessoa, telefone01, telefone02, email) 
VALUES (vidpessoa, ptelefone01, ptelefone02, pemail);

INSERT INTO Funcionario (id_Pessoa, id_Categoria, data_contrato, carga_horaria, especialidade) 
VALUES (vidpessoa, pid_Categoria, pdata_contrato, pcarga_horaria, pespecialidade);

SET vidfuncionario = LAST_INSERT_ID(); 

INSERT INTO Login (id_Funcionario, usuario, senha, nivel) 
VALUES (vidfuncionario, pusuario, psenha, pnivel);

SELECT * FROM Funcionario f
JOIN Pessoa p
USING(id_Pessoa)
	JOIN Contacto c
ON c.id_Pessoa = p.id_Pessoa
	JOIN Categoria g
USING(id_Categoria)
	LEFT OUTER JOIN Login l
USING(id_Funcionario) WHERE f.id_Funcionario = LAST_INSERT_ID(); 

END