Ir para conteúdo

POWERED BY:

Arquivado

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

Alcir Lima

em stored procedures e transactions (tou quase la, )

Recommended Posts

Pessoal, estou com um pequeno probleminha, se vocês puderem me ajudar eu agradeço MUITO:

 

Vou postar o código de minha tabela e o código das Procedures e Transactions para voces entenderem melhor:

 

Tabela 1

CREATE TABLE `anuncio` (
 `cod` int(10) unsigned NOT NULL auto_increment,
 `cod_usuario` int(10) unsigned NOT NULL,
 `info_tipo` varchar(8) collate latin1_general_ci NOT NULL,
 `info_fabricante` varchar(20) collate latin1_general_ci NOT NULL,
 `info_modelo` varchar(20) collate latin1_general_ci NOT NULL,
 `car_ano1` int(4) unsigned NOT NULL,
 `car_ano2` int(4) unsigned NOT NULL,
 `car_motor` varchar(15) collate latin1_general_ci NOT NULL,
 `car_cor` varchar(10) collate latin1_general_ci NOT NULL,
 `car_combustivel` varchar(15) collate latin1_general_ci NOT NULL,
 `car_km` varchar(8) collate latin1_general_ci NOT NULL,
 `car_porta` varchar(1) collate latin1_general_ci NOT NULL,
 `car_cambio` varchar(1) collate latin1_general_ci NOT NULL,
 `car_final_placa` int(1) unsigned NOT NULL,
 `car_preco` float NOT NULL,
 `car_versao` varchar(20) collate latin1_general_ci NOT NULL,
 `car_observacao` text collate latin1_general_ci NOT NULL,
 `data_inicio` date NOT NULL,
 `data_expiracao` date NOT NULL,
 `opc_destaque` int(1) unsigned NOT NULL,
 `situacao` varchar(3) collate latin1_general_ci NOT NULL,
 PRIMARY KEY  (`cod`),
 KEY `cod_usuario_anuncio` (`cod_usuario`)
) ENGINE=InnoDB;

 

Tabela 2

CREATE TABLE `anuncio_foto` (
 `cod` int(10) unsigned NOT NULL auto_increment,
 `cod_anuncio` int(10) unsigned NOT NULL,
 `foto_1` varchar(45) collate latin1_general_ci NOT NULL,
 `foto_2` varchar(45) collate latin1_general_ci NOT NULL,
 `foto_3` varchar(45) collate latin1_general_ci NOT NULL,
 `foto_4` varchar(45) collate latin1_general_ci NOT NULL,
 `foto_5` varchar(45) collate latin1_general_ci NOT NULL,
 PRIMARY KEY  (`cod`),
 KEY `cod_anuncio_anuncio_foto` (`cod_anuncio`)
) ENGINE=InnoDB;

 

Tabela 3

DELIMITER //
   CREATE PROCEDURE inserirAnuncioDados (
       v_cod_usuario INT,
       v_info_tipo VARCHAR(8),
       v_info_fabricante VARCHAR(20),
       v_info_modelo VARCHAR(20),
       v_car_ano1 INT(4),
       v_car_ano2 INT(4),
       v_car_motor VARCHAR(15),
       v_car_cor VARCHAR(10),
       v_car_combustivel VARCHAR(15),
       v_car_km VARCHAR(8),
       v_car_porta VARCHAR(1),
       v_car_cambio VARCHAR(1),
       v_car_final_placa INT(1),
       v_car_preco FLOAT,
       v_car_versao VARCHAR(20),
       v_car_observacao TEXT,
       v_data_inicio DATE,
       v_data_expiracao DATE,
       v_opc_destaque INT(1),
       v_situacao VARCHAR(3))

       BEGIN INSERT INTO
               anuncio (cod_usuario,info_tipo,info_fabricante,info_modelo,car_ano1,car_ano2,car_motor,c
ar_cor,car_combustivel,car_km,car_porta,car_cambio,car_final_placa,car_preco,car
_
versao,car_observacao,data_inicio,data_expiracao,opc_destaque,situacao)
           VALUES
               (v_cod_usuario,v_info_tipo,v_info_fabricante,v_info_modelo,v_car_ano1,v_car_ano2
,v_car_motor,v_car_cor,v_car_combustivel,v_car_km,v_car_porta,v_car_cambio,v_car
_
final_placa,v_car_preco,v_car_versao,v_car_observacao,v_data_inicio,v_data_expir
a
cao,v_opc_destaque,v_situacao);
       END ;
   //

   DELIMITER //
       CREATE PROCEDURE inserirAnuncioOpcional (
       v_cod_anuncio INT,
       v_cod_opcional INT(3))

       BEGIN INSERT INTO
               anuncio_opcional (cod_anuncio,cod_opcional)
           VALUES
               (v_cod_anuncio,v_cod_opcional);
       END;
   //

   DELIMITER //
       CREATE PROCEDURE inserirAnuncioFoto (
       v_cod_anuncio INT,
       v_foto_1 VARCHAR(45),
       v_foto_2 VARCHAR(45),
       v_foto_3 VARCHAR(45),
       v_foto_4 VARCHAR(45),
       v_foto_5 VARCHAR(45))

       BEGIN INSERT INTO
               anuncio_foto (cod_anuncio,foto_1,foto_2,foto_3,foto_4,foto_5)
           VALUES
               (v_cod_anuncio,v_foto_1,v_foto_2,v_foto_3,v_foto_4,v_foto_5);
       END;
   //

 

Transaction - esta transação não apresenta nenhum erro, mas ela não dá o COMMIT, e eu não consegui identificar o erro

START TRANSACTION;
       CALL inserirAnuncioDados(
           '2',
           'carro',
           'chevrolet',
           'celta',
           '2002',
           '2002',
           '1.0',
           'vermelho',
           'gasolina',
           '0',
           '2',
           'a',
           '9',
           '13500',
           'sport',
           'o carro e h muito novo',
           '2008-01-17',
           '2008-02-17',
           '0',
           'ati'
       );
   SELECT DISTINCT LAST_INSERT_ID() INTO @codAnuncio FROM anuncio;
          IF ((@codAnuncio <> NULL) OR (@codAnuncio <> '')) THEN
           CALL inserirAnuncioOpcional('@codAnuncio','20');
           CALL inserirAnuncioOpcional('@codAnuncio','21');
           CALL inserirAnuncioOpcional('@codAnuncio','22');
           CALL inserirAnuncioOpcional('@codAnuncio','23');
           CALL inserirAnuncioFoto('@codAnuncio','3','4','5','6','7');
       ELSE
           ROLLBACK;
           SELECT 'Nao foi possivel pegar o cod da insercao anterior' AS erro;
       END IF;
   COMMIT;

 

 

Não retorna erro nenhum, o mysql retorna a seguinte informação:

 

Query Result no Resultset.

 

Versão do Servidor: 5.0.45-community-nt

Versão do cliente MySQL: 5.0.45

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, ninguém conseguiu responder, mas depois de muito tentar e com a ajuda de Henrique (cassitos) eu consegui resolver a inserção...

 

Estou postando, pois algum de vocês podem ter a mesma dúvida que eu!, então lá vai:

 

START TRANSACTION;
 INSERT INTO anuncio VALUES (NULL,'2','carro','chevrolet','celta','2002','2002','1.0','vermelho','gasolina','0','2','a','9','13500','sport','o carro e h muito novo','2008-01-17','2008-02-17','0','ati');
 SELECT DISTINCT LAST_INSERT_ID() INTO @cod; INSERT INTO anuncio_opcional VALUES (NULL,@cod,'20');
 INSERT INTO anuncio_opcional VALUES (NULL,@cod,'21');
 INSERT INTO anuncio_opcional VALUES (NULL,@cod,'22');
 INSERT INTO anuncio_opcional VALUES (NULL,@cod,'23');
 INSERT INTO anuncio_foto VALUES (NULL,@cod,'1.jpg','2.jpg','3.jpg','4.jpg','5.jpg');
COMMIT;

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.