Exercicio trigger
Campus Sul
Disciplina de Banco de Dados Aplicado
Exercícios Aula 15 - Resolvidos
Seja o seguinte modelo de dados nível lógico:
1) Suponha a criação da tabela abaixo: Onde:
DATA data de vencimento
NR_PARCELA_PAGAS nro de parcelas geradas que foram pagas
VL_RECEBIDO valor das parcelas geradas que foram pagas
NR_PARCELA_GERADAS nro de parcelas geradas a partir das compras
VL_A_RECEBER valor a receber das parcelas geradas a partir das compras
Construa uma trigger de base que, ao ser gerada uma nova parcela, contabilize o valor da parcela para a coluna vl_a_receber e acrescente 1 na coluna nr_parcela_geradas na referida data de vencimento da tabela recebimento.
CRIANDO A TABELA: create table recebimento( data date not null, nr_parcela_pagas number(5), vl_recebido number(9,2), nr_parcela_geradas number(5), vl_a_receber number(9,2));
IMPLEMENTANDO A TRIGGER:
CREATE OR REPLACE TRIGGER TRGA17EX1
AFTER INSERT ON PARCELA
FOR EACH ROW
DECLARE
WEXISTEDATA NUMBER(1); WNR_PARCELA_GERADAS NUMBER(5); WVL_A_RECEBER NUMBER(9,2);
BEGIN
WEXISTEDATA := 0; SELECT COUNT(DATA) INTO WEXISTEDATA FROM RECEBIMENTO WHERE TRUNC(DATA) = TRUNC(:NEW.DT_VCTO); IF WEXISTEDATA = 0 THEN INSERT INTO RECEBIMENTO (DATA,NR_PARCELA_GERADAS,VL_A_RECEBER) VALUES (:NEW.DT_VCTO,1,:NEW.VL_PAR); ELSE UPDATE RECEBIMENTO SET NR_PARCELA_GERADAS = NR_PARCELA_GERADAS + 1, VL_A_RECEBER = VL_A_RECEBER + :NEW.VL_PAR WHERE TRUNC(DATA) = TRUNC(:NEW.DT_VCTO); END IF;
END;
2) Altere a trigger gerada no exercício 1 para que, ao ser pago uma parcela, seja contabilizado o valor pago para a coluna vl_recebido e acrescente 1 na coluna nr_parcela_pagas na referida data de vencimento da tabela recebimento.
CREATE OR REPLACE TRIGGER TRGA17EX2
AFTER UPDATE ON PARCELA
FOR EACH ROW
DECLARE
WEXISTEDATA NUMBER(1); WNR_PARCELA_GERADAS NUMBER(5); WVL_A_RECEBER NUMBER(9,2);