Pegar os valores dos campos dinamicamente pela TRIGGER
31/08/2007
0
Alguém sabe como pegar os valores de uma tabela na TRIGGER estou fazendo uma rotina para uma tabela de LOG. Fiz uma rotina que consegue trazer todos os campos de qualquer tabela. Mas não consigo trazer dinamicamente os valores dos campos correspondentes.
Obs estou fazendo em sybase, mas acho que a lógica é para qualquer banco.
Obs estou fazendo em sybase, mas acho que a lógica é para qualquer banco.
Acacio
Curtir tópico
+ 0
Responder
Posts
09/09/2007
Werlon Goulart
Em triggers do Sybase temos 2 tabelas que contém os valores atuais e os valores novos das colunas que estão sendo alterados/inseridos/deletados.
Em uma trigger de Insert por exemplo vc terá somente a tabela de Inserted onde estarão os valores das colunas que vc está inserindo na sua tabela;
Em trigger de Update vc terá na INSERTED o valor NOVO das colunas, ou seja o valor que vc alterou na sua tabela, e na DELETED o valor ATUAL (já que somente ápos a trigger os valores serão assumidos) das colunas.
Então em uma trigger de Update vc pode fazer um
select @coluna1 = coluna1,
@coluna2 = coluna2,
@coluna3 = coluna3
from Inserted
where coluna1 = @coluna1 --Neste caso a chave da tabela.
Onde vc teria os valores das colunas que estão sendo gravados.
Então em uma trigger de Delete vc pode fazer um
select @coluna1 = coluna1,
@coluna2 = coluna2,
@coluna3 = coluna3
from Deleted
where coluna1 = @coluna1 --Neste caso a chave da tabela.
Onde vc teria os valores atuais das colunas.
Poderia até fazer uma junção entre elas (Join);
Então em uma trigger de Update vc pode fazer algo do tipo:
select @coluna1 = I.coluna1,
@coluna2 = I.coluna2,
@coluna3 = D.coluna3
from Inserted I,
Deleted D
where I. coluna1 = @coluna1
and D.coluna1 = I.coluna1
Em triggers de Delete temos apenas a tabela de Deleted.
Em triggers de Insert temos apenas a tabela de Inserted.
Um abraço
Werlon Goulart
Em uma trigger de Insert por exemplo vc terá somente a tabela de Inserted onde estarão os valores das colunas que vc está inserindo na sua tabela;
Em trigger de Update vc terá na INSERTED o valor NOVO das colunas, ou seja o valor que vc alterou na sua tabela, e na DELETED o valor ATUAL (já que somente ápos a trigger os valores serão assumidos) das colunas.
Então em uma trigger de Update vc pode fazer um
select @coluna1 = coluna1,
@coluna2 = coluna2,
@coluna3 = coluna3
from Inserted
where coluna1 = @coluna1 --Neste caso a chave da tabela.
Onde vc teria os valores das colunas que estão sendo gravados.
Então em uma trigger de Delete vc pode fazer um
select @coluna1 = coluna1,
@coluna2 = coluna2,
@coluna3 = coluna3
from Deleted
where coluna1 = @coluna1 --Neste caso a chave da tabela.
Onde vc teria os valores atuais das colunas.
Poderia até fazer uma junção entre elas (Join);
Então em uma trigger de Update vc pode fazer algo do tipo:
select @coluna1 = I.coluna1,
@coluna2 = I.coluna2,
@coluna3 = D.coluna3
from Inserted I,
Deleted D
where I. coluna1 = @coluna1
and D.coluna1 = I.coluna1
Em triggers de Delete temos apenas a tabela de Deleted.
Em triggers de Insert temos apenas a tabela de Inserted.
Um abraço
Werlon Goulart
Responder
Clique aqui para fazer login e interagir na Comunidade :)