trigger com select e if

Firebird

14/10/2012

fiz uma trigger numa tabela para quando inserir dado nela ver se na outra tabela tem dados com status 1 senão ela deveria inserir um novo dado naquela tabela, porem não funciona como deveria alguem poderia me ajudar?

CREATE trigger creditos_bi0 for creditos
active before insert position 0
AS
begin
if(not exists(select 1 from historico h where h.status_his = 1)) then
insert into historico(DATABE_HIS,status_his) values(Cast(''TODAY'' As Date),1);
end
Lucas Monteiro

Lucas Monteiro

Curtidas 0

Respostas

Alisson Santos

Alisson Santos

14/10/2012

pelo que entendi quer verificar sempre se existe algum documento com status 1, caso exista vai inserir o documento.
Agora se existir mais de um documento com status um como funcionará.???
GOSTEI 0
Lucas Monteiro

Lucas Monteiro

14/10/2012

se não existir documento com status 1 ele adiciona, se existir não faz nada
GOSTEI 0
Lucas Monteiro

Lucas Monteiro

14/10/2012

fiz dessa forma tambem.
AS
  declare variable  cont INT;
begin
    select count(*) from historico h where h.status_his = 1 into cont ;

  if(cont = 0) then
    insert into historico(DATABE_HIS,status_his) values(Cast('TODAY' As Date),1);
end


mas mesmoa ssim ele não insere a nova linha
GOSTEI 0
Tiago

Tiago

14/10/2012

Lucas, coloque >=0 .... do jeito que o código está, ele só vai inserir quando a linha estiver vazia.
GOSTEI 0
Lucas Monteiro

Lucas Monteiro

14/10/2012

mas é essa mesmo a intenção.. só quando estiver ZERO,
deixa eu tenta explica melhor.

to na tabela de CREDITOS, inseri uma linha, entao ele vai ver se tem algum historico ativo se tem ele vai na tabela CREHIS e add o codigo do CREDITO e do HISTORICO[esta em outra trigger e funcionando perfeitamente isso], se não tivesse ele insere uma nova linha na tabela de historico e loco em seguida dispara a trigger que faz a junção dos codigo de CREDITOS e HISTORICO em CREHIS
GOSTEI 0
Alisson Santos

Alisson Santos

14/10/2012

Você debugou a sua trigger ou disparou ele de dentro do gerenciador do banco de dados.?
GOSTEI 0
Lucas Monteiro

Lucas Monteiro

14/10/2012

ja sim, ela entra no if certinho quando tem zero e não entra quando há, o problema é que não aparece a linha inserida em historico
GOSTEI 0
William

William

14/10/2012

Existe algum tipo de trigger na tabela historico, mas precisamento no eventos Before Update ou After Insert?

Vc testou esse INSERT isoladamente?
GOSTEI 0
Lucas Monteiro

Lucas Monteiro

14/10/2012

testei isolada sim funciono perfeitamente,

e tem essa trigger no before insert [unica por enquanto] em historicos:
AS
BEGIN
  if (NEW.id_his is NULL) then NEW.id_his = GEN_ID(gen_historico_id, 1);
END
GOSTEI 0
POSTAR