Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [ORACLE] Gestione Attributi derivati

    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.

  2. #2

    Re: [ORACLE] Gestione Attributi derivati

    Io farei così, ma è da verificare

    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
     UPDATE RATEIZZAZIONE
     SET TASSO_D_INTERESSE = 5
     WHERE CODICE = :NEW.CODICE
    END IF;
    END;
    /
    Come avevi proposto tu andavi a modificare il valore dell'attributo di bind :NEW.TASSO_D_INTERESSE, ma non lo rendevi persistente sulla tabella. Forse avrebbe potuto funzionare se tu avessi usato un trigger before piuttosto che after.
    Al limite prova entrambe le soluzioni.

    Ciao!

    Alex

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.