Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida Trigger

Boa noite,

Na aula, o professor passou o seguinte comando Trigger

    CREATE TRIGGER TG_ITENS_VENDIDOS
    ON [ITENS VENDIDOS] AFTER INSERT, UPDATE, DELETE
    AS

    BEGIN

        DELETE FROM TAB_FATURAMENTO;

        INSERT INTO TAB_FATURAMENTO (DATA_VENDA, TOTAL_VENDA)

        SELECT 
            A.DATA AS DATA_VENDA, SUM(B.QUANTIDADE * B.[PREÇO]) AS TOTAL_VENDA

        FROM 
            NOTAS A INNER JOIN [ITENS VENDIDOS] B ON A.NÚMERO = B.NÚMERO

        GROUP BY A.DATA;

    END; 

Minha duvida é, dentro do Begin possui o comando DELETE FROM TAB_FATURAMENTO, dessa forma, por que ao executar o comando SELECT * FROM TAB_FATURAMENTO possui o seguinte resultado:

https://imgur.com/7yOD9Yf

Sendo que, por ter deletado a tabela, os valores 90 da TOTAL_VENDA não era para ter sumido?

1 resposta
solução!

Ricardo, eu fiquei inicialmente com a mesma dúvida que você, mas depois eu entendi.

Todas as vezes que a TRIGGER é acionada ela inicialmente deleta todos os dados anteriores para gerar novos. Imagina que um professor está escrevendo em um quadro negro. Se ele apagar o quadro e escrever outra coisa, será isso que irá aparecer, contudo ele pode escrever exatamente a mesma coisa.

Repare que a primeira coisa feita na TRIGGER é justamente deletar os dados, pois ele quer começar do zero. Após isso ele irá fazer o INSERT utilizando o SELECT, trazendo assim o conteúdo para a TAB_FATURAMENTO.

Resumindo: todas as vezes que a TRIGGER for ativa ela irá apagar e inserir novamente os dados ao invés de simplesmente inserir novos. É como se você apagasse todo seu estoque e o refizesse toda vez que você vende um produto. Funciona, mas é um pouco mais trabalhoso do que poderia ser.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software