Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

valneyf

SP inserindo valor errado

Recommended Posts

Oi pessoal! Estou com um problema sobre SPs no MySQL. A SP abaixo está sendo executada normalmente, mas tem um erro que é: cadastra um valor de telefone diferente do passado via parametro. Segue:

 

SP:

BEGIN

DECLARE v_msg VARCHAR(50);

	START TRANSACTION; -- Início da transação

	-- Inserir nova pessoa(ID, Tipo Pessoa, Situacao Pessoa, Data Cadastro)
	INSERT INTO tblpessoa VALUES (NULL, 1,1, SYSDATE(), DEFAULT);
	-- Seleciona o ultimo ID inserido na tabela pessoa e coloca o valor na variavel @id
	SELECT MAX(idpes) FROM tblpessoa INTO @id;
	-- Caso não haja erro, continua a procedure
	-- Inserir nova pessoafisica
	INSERT INTO tblpessoafisica VALUES (@id, v_nome, v_cpf, v_rg, v_nascimento, v_sexo);		
	-- Caso não haja erro, continua a procedure
	-- Inserir novo aluno
	INSERT INTO tblaluno VALUES (@id, v_diapgto, v_idpacote);	
	-- Inserir novo endereco da pessoa
	INSERT INTO tblendereco VALUES (NULL, @id, v_tipoendereco, v_endereco, v_bairro, v_cidade, v_cep);
	-- Inserir novo contato da pessoa

	INSERT INTO tbltelefone VALUES (NULL, @id, v_res, v_com); Onde se encontra o erro

	SET idtel = @id;
	SET telef = v_res;
	SET cell = v_com;	
	-- Inserir novo email da pessoa
	INSERT INTO tblemail VALUES (NULL, @id, v_mail);	
	
	SET v_msg = 'Cadastrado com sucesso';
	COMMIT; -- Confirma as modificações no BD

	SELECT v_msg;

END

E esta é a chamada:

CALL spInserirAluno('meu nome', '35158981825', '32131561613262', '2014-09-01', 'M', '5', NULL, 'Rua', '6, 55', 'meu bairro', 'my city', '95561651', '9999999999', '8888888888', 'eu@mail.com', @idtel, @tel, @cel);OBS: Os campos em negrito são os campos de telefone. Os parâmetros de saída, coloquei pra debugar e saber se os valores inseridos eram os mesmos passados por parâmetro.SELECT @idtel, @tel, @cel; Select para verificar os valores dos parâmetros.A saída de resposta é essa:@idtel  |    @tel    |    @cel  1     | 2147483647 | 2147483647Já exclui o BD inteiro, gerei de novo e mesmo assim o erro persiste. Alguém tem idéia do que pode ser isso? Desde já agradeço a ajuda.Segue também estrutura da tabela telefone:
CREATE TABLE `tbltelefone` ( `idtel` INT(11) NOT NULL AUTO_INCREMENT, `pessoaid` INT(11) NOT NULL, `telres` INT(11) NOT NULL, `telcel` INT(11) NOT NULL, PRIMARY KEY (`idtel`), UNIQUE INDEX `idtelefone_UNIQUE` (`idtel`), INDEX `FK_tblPessoa_tblTelefone_idx` (`pessoaid`), CONSTRAINT `FK_tblPessoa_tblTelefone` FOREIGN KEY (`pessoaid`) REFERENCES `tblpessoa` (`idpes`) ON UPDATE NO ACTION ON DELETE NO ACTION ) COLLATE='utf8_unicode_ci' ENGINE=InnoDB 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ordem das colunas está correta ?

 

É mais segura fazer o insert assim

 

insert into tabela (coluna1,coluna2,coluna3...)

values (1,2,3,...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ordem das colunas está correta ?

 

É mais segura fazer o insert assim

 

insert into tabela (coluna1,coluna2,coluna3...)

values (1,2,3,...)

Sim, a ordem está correta.

Reformulei o insert para seu exemplo mas meu problema está na gravação dos dados.

Para qualquer valor que coloque para os parametros de telefone sempre é inserido a mesma informação (primeiro telefone: valor no BD: 2147483647, valor do parametro: 9999999999), (segundo telefone: valor no BD: 2147483647, valor do parametro: 8888888888). O valor que seria cadastrado deve ser o segundo que é o valor passado por parametro na procedure, mas o valor que fica no BD é o primeiro valor(2147483647).

 

Creio que ser algum tipo de "inserção suja", mas não sei como resolver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc tb nao publicou a sp toda, faltou a parte dos parametros, nao ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minhas sinceras desculpas amigo! Segue o que falta:

SP:

CREATE DEFINER=`root`@`localhost` PROCEDURE `spInserirAluno`(IN `v_nome` VARCHAR(50), IN `v_cpf` VARCHAR(11), IN `v_rg` VARCHAR(20), IN `v_nascimento` DATE, IN `v_sexo` CHAR(1), IN `v_diapgto` TINYINT(2), IN `v_idpacote` INT
	, IN `v_tipoendereco` VARCHAR(45), IN `v_endereco` VARCHAR(50), IN `v_bairro` VARCHAR(50), IN `v_cidade` VARCHAR(50), IN `v_cep` VARCHAR(8), IN `v_res` INT, IN `v_com` INT, IN `v_mail` VARCHAR(50), OUT `numpessoa` INT, OUT `telef` INT, OUT `cell` INT)
	LANGUAGE SQL
	NOT DETERMINISTIC
	CONTAINS SQL
	SQL SECURITY DEFINER
	COMMENT ''
BEGIN

DECLARE v_msg VARCHAR(50);

	START TRANSACTION; -- Início da transação

	-- Inserir nova pessoa(ID, Tipo Pessoa, Situacao Pessoa, Data Cadastro)
	INSERT INTO tblpessoa (idpes, tipopessoaid, situacaoid, dtcadpes, observapes ) 
	VALUES (NULL, 1,1, SYSDATE(), DEFAULT);
	-- Seleciona o ultimo ID inserido na tabela pessoa e coloca o valor na variavel @id
	SELECT MAX(idpes) FROM tblpessoa INTO @id;
	-- Caso não haja erro, continua a procedure
	-- Inserir nova pessoafisica
	INSERT INTO tblpessoafisica (idpesfis, nomepesfis, CPFpesfis, RGpesfis, dtnascpesfis, sexopesfis) 
	VALUES (@id, v_nome, v_cpf, v_rg, v_nascimento, v_sexo);		
	-- Caso não haja erro, continua a procedure
	-- Inserir novo aluno
	INSERT INTO tblaluno (idalu, dtpgto, pacoteid)
	VALUES (@id, v_diapgto, v_idpacote);	
	-- Inserir novo endereco da pessoa
	INSERT INTO tblendereco (idend, pessoaid, tipologradouro, logradouro, bairro, cidade, cep) 
	VALUES (NULL, @id, v_tipoendereco, v_endereco, v_bairro, v_cidade, v_cep);
	-- Inserir novo contato da pessoa
	INSERT INTO tbltelefone (idtel, pessoaid, telres, telcel) VALUES (NULL, @id, v_res, v_com);
	SET numpessoa = @id;
	SET telef = v_res;
	SET cell = v_com;	
	-- Inserir novo email da pessoa
	INSERT INTO tblemail (idmail, pessoaid, email) VALUES (NULL, @id, v_mail);	
	
	SET v_msg = 'Cadastrado com sucesso';
	COMMIT; -- Confirma as modificações no BD

	SELECT v_msg;

END

Chamada:

CALL spAlterarAluno(v_id, v_nome, v_cpf, v_rg, v_nascimento, v_sexo, v_situacao, v_diapgto, v_idpacote, v_tipologradouro, v_logradouro, v_bairro, v_cidade, v_cep, v_tel, v_cel, v_mail, @numpessoa, @telef, @cell)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq a chamada de pessoa,fone e cel é diferente !?

 

Não seria melhor usar char para os fones ainda que sejam apenas números ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq a chamada de pessoa,fone e cel é diferente !?

 

Não seria melhor usar char para os fones ainda que sejam apenas números ?

Motta, muito obrigado pela sua disponibilidade e rapidez na ajuda! Resolvido o problema ao mudar de INT para CHAR(11) nos campos de telefone como você sugeriu. Grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.