1
resposta

TRIGGER NÃO ESTÁ ATUALIZANDO

CREATE TABLE TAB_CALCULO (
PROATIVIDADE FLOAT NOT NULL,
QUANTIDADE_DEPOSITO FLOAT NULL,
QUANTIDADE_CESTAS FLOAT NULL,
QUANTIDADE_AGUA VARCHAR (20) NULL);

CREATE TABLE DOACOES(
PROATIVIDADE FLOAT NOT NULL,
DEPOSITO FLOAT NULL, 
CESTAS FLOAT NULL,
AGUA VARCHAR (20) NULL);

SELECT * FROM TAB_CALCULO;

SELECT C.PROATIVIDADE, C.QUANTIDADE_CESTAS, C.QUANTIDADE_DEPOSITO, C.QUANTIDADE_AGUA FROM TAB_CALCULO C;

SELECT D.PROATIVIDADE, D.CESTAS, D.DEPOSITO, D.AGUA FROM DOACOES D;

INSERT INTO TAB_CALCULO (PROATIVIDADE, QUANTIDADE_DEPOSITO, QUANTIDADE_CESTAS, QUANTIDADE_AGUA)
SELECT 
SUM(D.PROATIVIDADE) AS PROATIVIDADE, 
SUM(D.CESTAS) AS CESTAS, 
SUM(D.DEPOSITO) AS DEPOSITO, 
SUM(CONVERT(REPLACE(D.AGUA,"L",""),DECIMAL(20))) 
FROM DOACOES D;


/* CRIANDO TRIGGER */
DELIMITER $$
CREATE TRIGGER TG_CALCULA_DOACOES_INSERT AFTER INSERT ON TAB_CALCULO
FOR EACH ROW BEGIN 
    DELETE FROM TAB_CALCULO;
    INSERT INTO TAB_CALCULO (PROATIVIDADE, QUANTIDADE_DEPOSITO, QUANTIDADE_CESTAS, QUANTIDADE_AGUA)
    SELECT 
        SUM(D.PROATIVIDADE) AS PROATIVIDADE,
        SUM(D.DEPOSITO) AS QUANTIDADE_DEPOSITO, 
        SUM(D.CESTAS) AS QUANTIDADE_CESTAS, 
        SUM(CONVERT(REPLACE(D.AGUA,"L",""),DECIMAL(20))) 
    FROM DOACOES D;
END $$


SELECT DISTINCT * FROM tab_calculo;

INSERT INTO DOACOES (PROATIVIDADE, CESTAS, DEPOSITO, AGUA)
VALUES
(99.9,1500, 400,10000);
INSERT INTO DOACOES (PROATIVIDADE, CESTAS, DEPOSITO, AGUA)
VALUES
(86.3,1900, 9200, 2800);

trouxe dados de uma tabela(doacoes)para outra tab_calculo para fazer o calculo de todas as doações, porém a trigger não atualiza à cada soma na tab

1 resposta

Oi, Suellen! Tudo bem?

Desde já, peço desculpas pela demora em retornar.

O trigger não está atualizando como esperado devido ao seguinte comando:

CREATE TRIGGER TG_CALCULA_DOACOES_INSERT AFTER INSERT ON TAB_CALCULO

Por conta dele, o trigger sempre será acionado quando houver um INSERT em TAB_CALCULO. No entanto, a tabela correta a ser definida é DOACOES, a qual receberá novos registros e, a partir disso, alimentará TAB_CALCULO com o tempo. Nesse sentido, será necessário substituir TAB_CALCULO por DOACOES.

Para atualizar o trigger TG_CALCULA_DOACOES_INSERT, precisamos, inicialmente, excluí-lo:

DROP TRIGGER TG_CALCULA_DOACOES_INSERT 

Feito isso, já podemos criá-lo novamente indicando que sua ação dependerá de um INSERT na tabela DOACOES, desta forma:

CREATE TRIGGER TG_CALCULA_DOACOES_INSERT AFTER INSERT ON DOACOES
FOR EACH ROW BEGIN 
    DELETE FROM TAB_CALCULO;
    INSERT INTO TAB_CALCULO (PROATIVIDADE, QUANTIDADE_DEPOSITO, QUANTIDADE_CESTAS, QUANTIDADE_AGUA)
    SELECT 
        SUM(D.PROATIVIDADE) AS PROATIVIDADE,
        SUM(D.DEPOSITO) AS QUANTIDADE_DEPOSITO, 
        SUM(D.CESTAS) AS QUANTIDADE_CESTAS, 
        SUM(CONVERT(REPLACE(D.AGUA,"L",""),DECIMAL(20))) 
    FROM DOACOES D;
END $$

Assim, sempre que novos dados forem inseridos na tabela DOACOES, será adicionado em TAB_CALCULO uma nova soma de cada coluna!

Espero ter ajudado, Suellen! Caso surjam novas dúvidas, fico à disposição para ajudar.

Um forte abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!