Sto facendo un progetto per l'universita per la gestione di una concessionaria. Per gestire i vincoli di integrità dinamici dobbiamo utilizzare i trigger in Oracle 10g
VINCOLO D'INTEGRITA:
Se il numero di rate è:
- compreso tra 12 e 24, allora il tasso di interesse sarà pari al 5%
- compreso tra 24 e 48, allora il tasso di interesse sarà pari al 7%
- superiore a 48, allora il tasso di interesse sarà pari al 9%
ENTITA RATEIZZAZIONE: (è composta da questi campi)
CODICE
CODICE_SOCIETA_FINANZIARIA
TASSO_D_INTERESSE
NUMERO_RATE
Questo è il codice per la creazione di RATEIZZAZIONE
codice:
CREATE TABLE RATEIZZAZIONE (
CODICE VARCHAR2(7) CONSTRAINT PK_RATEIZZAZIONE PRIMARY KEY,
CODICE_SOCIETA_FINANZIARIA VARCHAR2(7) NOT NULL,
TASSO_D_INTERESSE NUMBER CHECK (TASSO_D_INTERESSE BETWEEN 5 AND 10),
NUMERO_RATE NUMBER CHECK (NUMERO_RATE BETWEEN 12 AND 61),
CONSTRAINT FK_RATEIZZAZIONE_PAGAMENTO FOREIGN KEY (CODICE) REFERENCES PAGAMENTO(CODICE),
CONSTRAINT FK_RATEIZZAZIONE_FINANZIARIA FOREIGN KEY (CODICE_SOCIETA_FINANZIARIA) REFERENCES SOCIETA_FINANZIARIA(CODICE)
);
questo è il codice per il popolamento di RATEIZZAZIONE
codice:
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM00','SOFIN00',12);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM01','SOFIN00',24);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM02','SOFIN01',36);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM03','SOFIN01',24);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM04','SOFIN02',60);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM05','SOFIN03',60);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM06','SOFIN04',48);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM07','SOFIN05',36);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM08','SOFIN06',24);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM09','SOFIN07',12);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM10','SOFIN08',24);
INSERT INTO RATEIZZAZIONE(CODICE,CODICE_SOCIETA_FINANZIARIA,NUMERO_RATE) VALUES
('PAGAM11','SOFIN09',12);
Ieri andai dal prof per avere delucidazioni in merito, mi dettò il seguente trigger:
codice:
CREATE OR REPLACE TRIGGER TRIGGER_RATE
AFTER INSERT ON RATEIZZAZIONE
FOR EACH ROW
BEGIN
SELECT NUMERO_RATE FROM RATEIZZAZIONE;
IF (:NEW.NUMERO_RATE>11 AND :NEW.NUMERO_RATE<25) THEN
:NEW.TASSO_D_INTERESSE:=5;
END IF;
END;
/
Praticamente, noi popoliamo la tabella RATEIZZAZIONE, rimanendo NULL il campo TASSO D'INTERESSE. Vorremmo che il trigger modificasse quel campo (tasso_d_interesse) in base al valore del campo NUMERO RATE (cioe andando a modificare il "null" e mettendoci i valori 5, 7 o 9). Cioe vorremmo che popolasse il campo TASSO_D_INTERESSE della tabella RATEIZZAZIONE.