none
transaccao RRS feed

  • Pergunta

  • ola, sera que alguem me pode dizer onde posso colocar Rollback no seguinte procedimento?

    create procedure Art_Veiculo_Leilao

    @id_tempo numeric(2,0),

    @id_categoria numeric(4,0),

    @id_utilizador numeric(9,0),

    @id_portes_pag numeric(1,0),

    @id_estado numeric(1,0),

    @id_negocio numeric(8,0),

    @titulo varchar(50),

    @titulo_ing varchar(50),

    @descricao varchar(200),

    @descricao_ing varchar(200),

    @data_inicio datetime,

    @data_fim datetime,

    @n_unidades numeric(4,0),

    @n_visualizacoes numeric(4,0),

    @visivel bit,

    @cobrado bit,

    @vendido bit,

    @Pin_util_activo bit,

    @id_tfinal numeric(2,0),

    @id_tinicial numeric(2,0),

    @preco numeric(9,2),

    @preco_compra_ja numeric(9,2),

    @preco_reserva numeric(9,2),

    @comissao_inicial numeric(8,2),

    @comissao_final numeric(8,2),

    @id_destaque numeric(1,0),

    @id_pagamento numeric(2,0),

    @id_local numeric(10,0),

    @id_pais numeric(3,0),

    @local varchar(50),

    @cidade varchar(30),

    @id_cor numeric(4,0),

    @id_modelo numeric(4,0),

    @id_combustivel numeric(4,0),

    @id_proprietario numeric(1,0),

    @ano numeric(4,0),

    @cap_deposito varchar(10),

    @id_terrestre numeric(8,0),

    @id_estofos numeric(1,0),

    @id_kms numeric(1,0),

    @id_radio numeric(1,0),

    @id_tecto_abrir numeric(1,0),

    @id_vidros numeric(1,0),

    @id_airbag numeric(1,0),

    @tipo_veiculo numeric(1,0),

    @ipo bit,

    @jantes_especiais bit,

    @computador_bordo bit,

    @farois_nevoeiro bit,

    @direccao_assistida bit,

    @n_hor_voo numeric(6,0),

    @id_aereo numeric(8,0),

    @id_maritimo numeric(8,0),

    @mat_casco_port varchar(40),

    @mat_casco_ing varchar(40),

    @comprimento numeric(6,0),

    @largura numeric(6,0),

    @nome_imagem varchar(30),

    @nome_imagem2 varchar(30),

    @nome_imagem3 varchar(30),

    @nome_imagem4 varchar(30),

    @cont_imagem numeric(1,0)

    As

    DECLARE @ID_IMAGEM numeric(8,0)

    DECLARE @IDENT numeric(9,0)

    DECLARE @ID_LOCALIDADE numeric(10,0)

    BEGIN TRANSACTION

    if @id_local<=4121

    begin

    insert into artigo(id_local,id_categoria,id_utilizador,id_portes_pag,id_estado,id_negocio,titulo,titulo_ing,descricao,descricao_ing,data_inicio,data_fim,n_unidades,n_visualizacoes,visivel,cobrado,vendido,id_tempo,Pin_util_activo) values(@id_local,@id_categoria,@id_utilizador,@id_portes_pag,@id_estado,@id_negocio,@titulo,@titulo_ing,@descricao,@descricao_ing,@data_inicio,@data_fim,@n_unidades,@n_visualizacoes,@visivel,@cobrado,@vendido,@id_tempo,@Pin_util_activo)

    Select @Ident = SCOPE_IDENTITY()

    end

    if @id_local>4121

    Begin

    insert into local default values

    select @ID_LOCALIDADE =SCOPE_IDENTITY()

    insert into artigo(id_local,id_categoria,id_utilizador,id_portes_pag,id_estado,id_negocio,titulo,titulo_ing,descricao,descricao_ing,data_inicio,data_fim,n_unidades,n_visualizacoes,visivel,cobrado,vendido,id_tempo,Pin_util_activo) values(@ID_LOCALIDADE,@id_categoria,@id_utilizador,@id_portes_pag,@id_estado,@id_negocio,@titulo,@titulo_ing,@descricao,@descricao_ing,@data_inicio,@data_fim,@n_unidades,@n_visualizacoes,@visivel,@cobrado,@vendido,@id_tempo,@Pin_util_activo)

    Select @Ident = SCOPE_IDENTITY()

    insert into estrangeiro(id_local,id_pais,local,cidade) values(@ID_LOCALIDADE,@id_pais,@local,@cidade)

    End

    insert into veiculo(id_artigo,id_cor,id_modelo,id_combustivel,id_proprietario,ano,capacidade_deposito) values(@Ident,@id_cor,@id_modelo,@id_combustivel,@id_proprietario,@ano,@cap_deposito)

    if @tipo_veiculo=0

    Begin

    insert into terrestre(id_artigo,id_estofos,id_kms,id_vidros,id_tecto_abrir,id_radio,id_airbag,id_terrestre,ipo,farois_nevoeiro,computador_bordo,direccao_assistida,jantes_especiais) values(@Ident,@id_estofos,@id_kms,@id_vidros,@id_tecto_abrir,@id_radio,@id_airbag,@id_terrestre,@ipo,@farois_nevoeiro,@computador_bordo,@direccao_assistida,@jantes_especiais)

    End

    if @tipo_veiculo=1

    Begin

    insert into maritimo(id_artigo,id_maritimo,comprimento,largura,material_casco,material_casco_ing) values(@Ident,@id_maritimo,@comprimento,@largura,@mat_casco_port,@mat_casco_ing)

    End

    if @tipo_veiculo=2

    Begin

    insert into aereo(id_artigo,id_aereo,horas_voo) values(@Ident,@id_aereo,@n_hor_voo)

    End

    insert into artigo_leilao(id_artigo,id_tfinal,id_tinicial,licitacao_minima,preco_compra_ja,preco_reserva,comissao_inicial,comissao_final) values(@Ident,@id_tfinal,@id_tinicial,@preco,@preco_compra_ja,@preco_reserva,@comissao_inicial,@comissao_final)

    insert into artigo_destaque(id_destaque,id_artigo) values(@id_destaque,@Ident)

    insert into pagamento_artigo(id_pagamento,id_artigo) values(@id_pagamento,@IDENT)

    insert into imagem(imagem) values(@nome_imagem)

    select @ID_IMAGEM =SCOPE_IDENTITY()

    insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)

    if @cont_imagem > 1

    begin

    insert into imagem(imagem) values(@nome_imagem2)

    select @ID_IMAGEM =SCOPE_IDENTITY()

    insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)

    end

    if @cont_imagem > 2

    begin

    insert into imagem(imagem) values(@nome_imagem3)

    select @ID_IMAGEM =SCOPE_IDENTITY()

    insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)

    end

    if @cont_imagem > 3

    begin

    insert into imagem(imagem) values(@nome_imagem4)

    select @ID_IMAGEM =SCOPE_IDENTITY()

    insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)

    end

    COMMIT TRANSACTION

    quarta-feira, 13 de setembro de 2006 10:17

Todas as Respostas

  •  

      Pode sim, qual a sua idea ? testar se algum insert falhou ? se for isso crie uma variavel dentro da proc

     declare @erro int

     select @erro =0

     depois a cada insert coloque

      select @erro = @erro + 1

      no final teste

      if @erro = 0

       Commit

     else

       rollback

    Abs;

     

    quarta-feira, 13 de setembro de 2006 10:20
  • ola Marcelo em relação a fazer o rollback de toda a transaçao sempre que um insert falhe, fiz o que me disse ma snao funcionou.

    create procedure Art_Anim_Class
    @id_tempo numeric(2,0),
    @id_local numeric(10,0),
    @id_categoria numeric(4,0),
    @id_utilizador numeric(9,0),
    @id_portes_pag numeric(1,0),
    @id_estado numeric(1,0),
    @id_negocio numeric(1,0),
    @titulo varchar(50),
    @titulo_ing varchar(50),
    @descricao varchar(200),
    @descricao_ing varchar(200),
    @data_inicio datetime,
    @data_fim datetime,
    @n_unidades numeric(4,0),
    @n_visualizacoes numeric(4,0),
    @visivel bit,
    @cobrado bit,
    @vendido bit,
    @Pin_util_activo bit,
    @id_especie numeric(8,0),
    @raca varchar(20),
    @raca_ing varchar(20),
    @nome varchar(50),
    @preco numeric(9,2),
    @comissao_final numeric(8,2),
    @id_destaque numeric(1,0),
    @id_pagamento numeric(2,0),
    @id_pais numeric(3,0),
    @local varchar(50),
    @cidade varchar(30),
    @nome_imagem varchar(30),
    @nome_imagem2 varchar(30),
    @nome_imagem3 varchar(30),
    @nome_imagem4 varchar(30),
    @cont_imagem numeric(1,0)
    As
    DECLARE @IDENT numeric(9,0)
    DECLARE @ID_LOCALIDADE numeric(10,0)
    DECLARE @ID_IMAGEM numeric(8,0)
    declare @erro int

     

     

    BEGIN TRANSACTION
    select @erro =0

    if @id_local<=4121
    begin
      insert into artigo(id_local,id_categoria,id_utilizador,id_portes_pag,id_estado,id_negocio,titulo,titulo_ing,descricao,descricao_ing,data_inicio,data_fim,n_unidades,n_visualizacoes,visivel,cobrado,vendido,id_tempo,Pin_util_activo) values(@id_local,@id_categoria,@id_utilizador,@id_portes_pag,@id_estado,@id_negocio,@titulo,@titulo_ing,@descricao,@descricao_ing,@data_inicio,@data_fim,@n_unidades,@n_visualizacoes,@visivel,@cobrado,@vendido,@id_tempo,@Pin_util_activo)
      Select @Ident = SCOPE_IDENTITY()
      select @erro = @erro + 1
      
    end
    if @id_local>4121
    Begin

         insert into local default values
      select @ID_LOCALIDADE =SCOPE_IDENTITY()
      insert into artigo(id_local,id_categoria,id_utilizador,id_portes_pag,id_estado,id_negocio,titulo,titulo_ing,descricao,descricao_ing,data_inicio,data_fim,n_unidades,n_visualizacoes,visivel,cobrado,vendido,id_tempo,Pin_util_activo) values(@ID_LOCALIDADE,@id_categoria,@id_utilizador,@id_portes_pag,@id_estado,@id_negocio,@titulo,@titulo_ing,@descricao,@descricao_ing,@data_inicio,@data_fim,@n_unidades,@n_visualizacoes,@visivel,@cobrado,@vendido,@id_tempo,@Pin_util_activo)
      select @erro = @erro + 1
     Select @Ident = SCOPE_IDENTITY()
      insert into estrangeiro(id_local,id_pais,local,cidade) values(@ID_LOCALIDADE,@id_pais,@local,@cidade)
     select @erro = @erro + 1
     

     End
     insert into artigo_classificado(id_artigo,preca,comissao_final) values(@Ident,@preco,@comissao_final)
     select @erro = @erro + 1
     insert into animal(id_artigo,id_especie,raca,nome,raca_ing) values(@Ident,@id_especie,@raca,@nome,@raca_ing)
     select @erro = @erro + 1
     insert into artigo_destaque(id_destaque,id_artigo) values(@id_destaque,@Ident)
     select @erro = @erro + 1
     insert into pagamento_artigo(id_pagamento,id_artigo) values(@id_pagamento,@IDENT)
     select @erro = @erro + 1
     
     insert into imagem(imagem) values(@nome_imagem)
     select @erro = @erro + 1
     select @ID_IMAGEM =SCOPE_IDENTITY()
     insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)
     select @erro = @erro + 1

    if @cont_imagem > 1
    begin
     insert into imagem(imagem) values(@nome_imagem2)
     select @erro = @erro + 1
     select @ID_IMAGEM =SCOPE_IDENTITY()
     insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)
     select @erro = @erro + 1
    end
    if @cont_imagem > 2
    begin
     insert into imagem(imagem) values(@nome_imagem3)
     select @erro = @erro + 1
     select @ID_IMAGEM =SCOPE_IDENTITY()
     insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)
     select @erro = @erro + 1
    end
    if @cont_imagem > 3
    begin
     insert into imagem(imagem) values(@nome_imagem4)
     select @erro = @erro + 1
     select @ID_IMAGEM =SCOPE_IDENTITY()
     insert into imagem_artigo(id_imagem,id_artigo) values(@ID_IMAGEM,@IDENT)
     select @erro = @erro + 1
    end
     if @erro = 0

       COMMIT TRANSACTION

     else

       rollback TRANSACTION


     

     

    quarta-feira, 20 de setembro de 2006 12:11
  • qual foi o erro ? ele comitou tudo ?

     

    Abs.

    quarta-feira, 20 de setembro de 2006 14:31
  • nao insere nada.
    quarta-feira, 20 de setembro de 2006 16:06
  •  

     

     achei o problema, na verdade tem que alterar um pouco o que eu te passsei

     onde esta

     

      Set @erro = @Erro + 1

    troque por

       Set @Erro = @erro + @@error

     

    Abs;

    quinta-feira, 21 de setembro de 2006 10:51