1
resposta

06 - manipulacao-dados-oracle-dml/task/109929 - Relatório de orçamento por funcionário

DUAS ULTIMAS ESTÃO ERRADAS:

CREATE OR REPLACE TRIGGER TG_TAB_PROJETO
AFTER INSERT OR UPDATE OR DELETE ON **TG_TAB_PROJETO**
BEGIN
DELETE FROM TAB_FUNCIONARIO_ORCAMENTO;
INSERT INTO TAB_FUNCIONARIO_ORCAMENTO
SELECT TD.NOME_DEPARTAMENTO AS DEPARTAMENTO, ROUND(TP.SOMA/COUNT(*),2) AS TOTAL 
 FROM
TAB_DEPARTAMENTO TD
INNER JOIN
TAB_FUNCIONARIO TF
ON TD.COD_DEPARTAMENTO = TF.COD_DEPARTAMENTO
INNER JOIN
(SELECT P.COD_DEPARTAMENTO, SUM(P.ORCAMENTO) AS SOMA
FROM TAB_PROJETO P
GROUP BY P.COD_DEPARTAMENTO) TP
ON TD.COD_DEPARTAMENTO = TP.COD_DEPARTAMENTO
GROUP BY TD.NOME_DEPARTAMENTO, TP.SOMA;
END;

E

CREATE OR REPLACE TRIGGER TG_TAB_DEPARTAMENTO
AFTER INSERT OR UPDATE OR DELETE ON **TG_TAB_DEPARTAMENTO**
BEGIN
DELETE FROM TAB_FUNCIONARIO_ORCAMENTO;
INSERT INTO TAB_FUNCIONARIO_ORCAMENTO
SELECT TD.NOME_DEPARTAMENTO AS DEPARTAMENTO, ROUND(TP.SOMA/COUNT(*),2) AS TOTAL 
 FROM
TAB_DEPARTAMENTO TD
INNER JOIN
TAB_FUNCIONARIO TF
ON TD.COD_DEPARTAMENTO = TF.COD_DEPARTAMENTO
INNER JOIN
(SELECT P.COD_DEPARTAMENTO, SUM(P.ORCAMENTO) AS SOMA
FROM TAB_PROJETO P
GROUP BY P.COD_DEPARTAMENTO) TP
ON TD.COD_DEPARTAMENTO = TP.COD_DEPARTAMENTO
GROUP BY TD.NOME_DEPARTAMENTO, TP.SOMA;
END;

O CORRETO SERIA :

CREATE OR REPLACE TRIGGER TG_TAB_PROJETO
AFTER INSERT OR UPDATE OR DELETE ON **TAB_FUNCIONARIO**
BEGIN
DELETE FROM TAB_FUNCIONARIO_ORCAMENTO;
INSERT INTO TAB_FUNCIONARIO_ORCAMENTO
SELECT TD.NOME_DEPARTAMENTO AS DEPARTAMENTO, ROUND(TP.SOMA/COUNT(*),2) AS TOTAL 
 FROM
TAB_DEPARTAMENTO TD
INNER JOIN
TAB_FUNCIONARIO TF
ON TD.COD_DEPARTAMENTO = TF.COD_DEPARTAMENTO
INNER JOIN
(SELECT P.COD_DEPARTAMENTO, SUM(P.ORCAMENTO) AS SOMA
FROM TAB_PROJETO P
GROUP BY P.COD_DEPARTAMENTO) TP
ON TD.COD_DEPARTAMENTO = TP.COD_DEPARTAMENTO
GROUP BY TD.NOME_DEPARTAMENTO, TP.SOMA;
END;


CREATE OR REPLACE TRIGGER TG_TAB_DEPARTAMENTO
AFTER INSERT OR UPDATE OR DELETE ON **TAB_FUNCIONARIO**
BEGIN
DELETE FROM TAB_FUNCIONARIO_ORCAMENTO;
INSERT INTO TAB_FUNCIONARIO_ORCAMENTO
SELECT TD.NOME_DEPARTAMENTO AS DEPARTAMENTO, ROUND(TP.SOMA/COUNT(*),2) AS TOTAL 
 FROM
TAB_DEPARTAMENTO TD
INNER JOIN
TAB_FUNCIONARIO TF
ON TD.COD_DEPARTAMENTO = TF.COD_DEPARTAMENTO
INNER JOIN
(SELECT P.COD_DEPARTAMENTO, SUM(P.ORCAMENTO) AS SOMA
FROM TAB_PROJETO P
GROUP BY P.COD_DEPARTAMENTO) TP
ON TD.COD_DEPARTAMENTO = TP.COD_DEPARTAMENTO
GROUP BY TD.NOME_DEPARTAMENTO, TP.SOMA;
END;
1 resposta

Olá, Maelson!

Tudo bem?

Muito obrigado pelo feedback, eu vou passar para o time de conteúdo da Alura que são responsáveis pela correção e atualização da plataforma, para estarem analisando e corrigindo posteriormente.

Bons estudos!