Ir para conteúdo
SILVASS

Trigger que traga todos os dados, inclusive, os que não sofreram alteração

Recommended Posts

Ola,  ja começo pedindo desculpa por mais esse tópico, mas eu realmente não consegui achar nada que me ajudasse.

Eu preciso criar uma trigger ou qualquer outro procedimento, que me permite incluir todos os dados da tabela principal na tabela histórico a cada alteração/inserção.

 

 

Está é a trigger que tenho, ela só me retorna o dado alterado/inserido.

 
 
FOR UPDATE, INSERT
 AS
   BEGIN
       SET NOCOUNT ON

       INSERT INTO tb_historico  (id_beneficio, habitantes, ano, dh_update)
           SELECT id_beneficio, habitantes, ano,  GETDATE()
           FROM INSERTED
           END

O dados na minha tabela são os seguintes:
id     habitante    ano
1    10000     2019
2    20000     2019
3    30000     2019


Alterei a primeira linha
id     habitante    ano
1    50000    2019
2    20000     2019
3    30000     2019


preciso que além do dado alterado, me retorne os dados que não sofreram nenhuma modificação
id     habitante    ano     
1    50000    2019
2    20000     2019
3    30000     2019


Hoje o retorno dela seria apenas o dado alterado.
id     habitante    ano
1    50000    2019

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Jack, dei uma lida nos arquivos, mas não achei que me ajudou, desculpa minha ignorância.

Mais ainda continuo meio perdida em como fazer.

 

Eu mencionei a trigger, mas não necessariamente, precisa ser ela. Até porque não sei se a trigger permite isso.

 

Eu preciso criar uma copia fiei da minha tabela principal,  na minha histórico.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai ser incluída na histórico o que não foi alterado ?

----------------------------------------------------------------------------------------

Se poderia , criar a historico zerada

a trigger seria algo assim

update tabelalog where ....
se linhas_afetadas = 0 então
  insere tabelalog 

 

se faz inicialmente um insert na tabelalog baseada na tabela (insert into select)

habiita a trigger

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Mota, desde ja agradeço a atenção.

 

Sim na historico, tem que vir tudo. Minha Tabela pai tem 8 linhas, essas 8 linhas tem que ir pra tabela histórico. 

Mesmo que apenas 1 linha tenha sofrido alteração. 

 

Eu fiz algo assim.

Porem ainda me retorna apenas 1 linha.

 

  FOR UPDATE, INSERT 
  AS 
    BEGIN 

    declare @historico table (
    id int,
    habitantes varchar(200),
    ano int)



    INSERT INTO  @historico (id, habitantes, ano) 
    SELECT id_custo_beneficio, habitantes, ano
    FROM inserted



    insert into tb_historico (id_custo_beneficio, habitantes, ano, dh_update)
    select id, habitantes, ano, getdate() from @historico


 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz sentido um log de não alterados.

Se poderua manter um espelho da tabela por

Update

  se não existe

     insert

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por dfoliveira82
      Bom dia senhores,
       
      sou novo no Oracle, antes trabalhava com SQL SERVER, e me deparei com algo que ja estou a horas tentando solucionar mas nao consegui.
      Nessa Trigger que vou postar, quando mando compilar ela, fala que esta faltando uma virgula, apos o values, mas nao precisa dela e nao acho onde pode ser essa virgula faltante.
      CREATE OR REPLACE TRIGGER JOBS_CL_INSERE_USUARIO AFTER INSERT OR UPDATE OF EXPORTADA_AVA ON SITE_USUARIOS REFERENCING NEW AS NEW BEGIN INSERT INTO BLACKBEAN.TBL_USERS VALUES (NULL, 'INSERT', NULL, 'db', '0', '0', '0', TO_CHAR(:NEW.CPF), MD5(:NEW.CPF||'port@l'), TO_CHAR(:NEW.CPF), SUBSTRING(:NEW.NOME, 1, INSTR(:NEW.NOME, ' ')-1), SUBSTRING(:NEW.NOME, INSTR(:NEW.NOME, ' ')+1, LEN(:NEW.NOME)), 'email@email.com', NULL, NULL, DATE_TO_UNIX_TS(SYSDATE), NULL, NULL); END; / Se alguem puder me ajudar agradeceria.
    • Por Carlos Antoliv
      Senhores, bom dia.
       
      tenho um campo status. Então, a ideia é mudar o status. Consigo alterar o status quando necessário. Daí, pensei em todas vez que alterar, salvar o id do usuário, data, hora, o último status alterado...
      consigo fazer isso com INSERT, depois do UPDATE.
       
      Nao uso trigger. Até tentei fazer, mas não saiu como eu queria.
       
      Então, para os maiores entendedores do assunto, a melhor prática seria a TRIGGER ou INSERT ? Melhor prática ou o que mais funciona na prática ?
       
      Alguém poderia dissertar sobre isso ?
      Vlw..abço
    • Por mateus.andriollo
      Gostaria de saber se alguém tem uma trigger para fazer log de qualquer tipo de transação de dados em qualquer tabela do banco. Porém, preciso carregar um campo UserName que será setado a cada conexão via login php
      SET @UserName = 'ZeBala' Achei vários exemplos porém tenho q criar um trigger para cada tabela
       
      CREATE TRIGGER roles_audit_au AFTER UPDATE ON `<nome_tabela>` Existe uma forma de não ser direcionada?
    • Por gcors88
      Prezados, desenvolvi um gatilho onde este tem comunicação com outra tabela, uma é a coleta_sinal_vital, e onde o gatilho foi criado é na table  itcoleta_sinal_vital ( esta possui uma fk da primeira), a questão é que dentro do gatilho realizo um select na primeira tabela para consultar o valor inserido em uma coluna da primeira tabela, faço essa consulta baseada nessa fk que esta sendo inserida ou seja where = :new.cd_coleta_sinal_vital, a questão é que no momento em que esse select é executado ele não retorna dado nenhum, acredito que isto ocorre porque a inserção em ambas as tabelas é feito de forma simultânea, pois se comparado posteriormente o valor da coluna sempre é inserido, gostaria de saber se existe alguma forma de aplicar uma espera ou atraso neste gatilho para que ele possa capturar este valor sem problemas, grato!
    • Por José Peixoto
      Olá,
       
      há alguma forma de fazer uma trigger só ser executada depois que a outra executar? 
       
      Por exemplo: a trigger2 só é disparada quando a trigger1 fizer o commit das informações.
       
      Obrigado desde já :)
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.