
-- SI-T 18/02/2022 - ESE3

-- 3.2)

create table CLIENTI (
     CF_Cliente char(16) not null primary key,
     Nome varchar(30) not null,
     Telefono char(10) not null,
     Totale DEC(8,2) not null DEFAULT 0,
     Premium char(2) not null CHECK (Premium IN ('SI','NO')) DEFAULT 'NO' );

create table FATTURE (
     NumFattura INT not null primary key,
     Data DATE not null,
     Importo DEC(8,2) not null CHECK (Importo > 0),
     CF_Cliente char(16) not null references CLIENTI );

-- alter table CLIENTI add constraint ID_CLIENTI_CHK
--     check(exists(select * from FATTURE
--                  where FATTURE.CF_Cliente = CF_Cliente)); 

   
-- 3.3)

-- INSERT per testare il funzionamento

INSERT INTO CLIENTI VALUES
('abcdef11a12x944j','Pippo','123-456789',DEFAULT,DEFAULT);

CREATE OR REPLACE TRIGGER AGGIORNA_TOTALE
AFTER INSERT ON FATTURE
REFERENCING NEW AS N
FOR EACH ROW
UPDATE CLIENTI
SET		Totale = Totale + N.Importo
WHERE	  	CF_Cliente = N.CF_Cliente;

CREATE OR REPLACE TRIGGER AGGIORNA_FLAG
AFTER UPDATE OF Totale ON CLIENTI
REFERENCING NEW AS N
FOR EACH ROW
WHEN (N.Totale > 1000 AND N.Premium = 'NO')
UPDATE CLIENTI
SET		Premium = 'SI'
WHERE	  	CF_Cliente = N.CF_Cliente;

INSERT INTO FATTURE VALUES
(:numFattura, CURRENT DATE, :importo, 'abcdef11a12x944j');
