RollBack e Commit

Firebird

08/10/2003

Caros colegas, estou migrando minha base de dados de Sql Server para Firebird e estou com algumas duvidas, como por exemplo trabalhar com rollback e commit em uma transação. Eu criei esta trigger no Sql Server da seguinte forma:

create trigger tI_TbAdicItemOrcPedVnd on dbo.TbAdicItemOrcPedVnd for Insert as
begin
declare @errno int,
@errmsg varchar(255)
if Not Exists(Select * From TbOrcPedVnd, Inserted
Where
Inserted.CodEmpr = TbOrcPedVnd.CodEmpr and
Inserted.NrOrcPedVnd = TbOrcPedVnd.NrOrcPedVnd)
begin
select @errno = 30007,
@errmsg = ´Nao e incluir os dados de adicionais financeiros do item pois o documento de pre-venda nao existe.´
goto error
end
if Not Exists(Select * From TbItem, Inserted
Where
Inserted.CodEmpr = TbItem.CodEmpr and
Inserted.CodItem = TbItem.CodItem)
begin
select @errno = 30007,
@errmsg = ´Nao e possivel inserir o adicional financeiro pois o Produto informado nao existe.´
goto error
end
return
error:
raiserror @errno @errmsg
rollback transaction
end




---------

Tenho um Label chamado ´Error´ que ao gerar algum erro ele faz um ´GOTO´ para o ´Error´ e dentro deste error eu tenho um RollBack, nesta caso como funciona no Firebird esta trigger?

Obrigado.


Halexmaciel

Halexmaciel

Curtidas 0

Respostas

Afarias

Afarias

08/10/2003

NÃO!

as triggers e stored procedures no IB ou FB ocorrem no contexto de uma transação e não possuem qualquer controle sobre esta!

.. ou seja:: vc não pode iniciar ou finalizar com commit ou rollback uma transação dentro do código de uma trigger ou stored proc.


T+


GOSTEI 0
Torres Delphi

Torres Delphi

08/10/2003

Eh realmente eh verdade, no IB/FB nao existe controle de transacao dentro de procedures, o que no meu ponto de vista, eh muito ruim, pois se funcionasse como no SQL Server, seria muito mais facil controlar a aplicacao, mas...
Procurei bastante sobre esse assunto, e encontrei algumas solucoes para essa deficiencia, em alguns exemplo que vi, no Delphi, a procedure era chamada com o uso de ´try...except´

[]´s


GOSTEI 0
Rafael Mattos

Rafael Mattos

08/10/2003

Pelo que eu li, em http://www.destructor.de/firebird/trigger.htm

As Triggers são executadas no contexto de sua transação, elas são tratadas como parte da operação atual, ou seja, as ações de uma Trigger que resultou em uma transação que é ROLLBACKed, será revertida também.
GOSTEI 0
POSTAR