valneyf 0 Denunciar post Postado Setembro 8, 2014 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
Motta 645 Denunciar post Postado Setembro 8, 2014 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
valneyf 0 Denunciar post Postado Setembro 8, 2014 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
Motta 645 Denunciar post Postado Setembro 9, 2014 Vc tb nao publicou a sp toda, faltou a parte dos parametros, nao ? Compartilhar este post Link para o post Compartilhar em outros sites
valneyf 0 Denunciar post Postado Setembro 9, 2014 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
Motta 645 Denunciar post Postado Setembro 9, 2014 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
valneyf 0 Denunciar post Postado Setembro 9, 2014 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