• Tecnologie delle basi di dati – Esercitazione 1 sui Trigger di Oracle

    Date: 2010.11.14 | Category: Progetti Politecnico, Tecnologie delle Basi di Dati | Tags: ,

    Esercizi SQL Trigger Oracle In questo articolo riporto il primo esercizio proposto durante il corso di Tecnologie delle Basi di Dati che riguarda la creazione di un semplice trigger in Oracle (la versione utilizzata è Oracle Database 10g Express Edition): il trigger riguarda un aggiornamento automatico del salario dei dipendenti nel momento in cui un dipartimento passi dal ruolo Accounting a quello Sales.

    Testo Esercizio 1

    Si consideri la seguente base di dati
    IMP ( EMPNO, DEPTNO, ENAME, JOB, SAL )
    DIP ( DEPTNO, DNAME, LOC, MINSAL, MAXSAL )
    Nel caso un dipartimento passi dal ruolo (attributo DNAME) di ‘ACCOUNTING’ al ruolo di ‘SALES’, il salario per tutti gli impiegati del dipartimento viene incrementato di 100. Definire un trigger che implementi tale funzionalità:

    Codice Trigger Esercizio 1 – Soluzione 1

    CREATE TRIGGER UP_DIPARTIMENTO
    AFTER UPDATE ON DIP
    FOR EACH ROW

    BEGIN

    IF(:OLD.dname = 'ACCOUNTING' AND :NEW.dname= 'SALES') THEN
    --- IL NOME DEL DIPARTIMENTO è CAMBIATO DA ACCOUNTING A SALES
    ---AGGIORNO IL SALARIO DEI DIPENDENTI DI QUEL DIPARTIMENTO

    UPDATE IMP SET SAL=SAL+100 WHERE DEPTNO=:NEW.DEPTNO;

    END IF;
    END;

    Codice Trigger Esercizio 1 – Soluzione 2

    CREATE TRIGGER UP_DIPARTIMENTO
    AFTER UPDATE OF DNAME ON DIP
    FOR EACH ROW

    BEGIN

    IF(:OLD.dname = 'ACCOUNTING' AND :NEW.dname= 'SALES') THEN
    --- IL NOME DEL DIPARTIMENTO è CAMBIATO DA ACCOUNTING A SALES
    ---AGGIORNO IL SALARIO DEI DIPENDENTI DI QUEL DIPARTIMENTO

    UPDATE IMP SET SAL=SAL+100 WHERE DEPTNO=:NEW.DEPTNO;

    END IF;
    END;

    Codice Trigger Esercizio 1 – Soluzione 3

    CREATE TRIGGER UP_DIPARTIMENTO
    AFTER UPDATE OF DNAME ON DIP
    FOR EACH ROW
    WHEN OLD.dname = 'ACCOUNTING' AND :NEW.dname= 'SALES'

    BEGIN

    --- IL NOME DEL DIPARTIMENTO è CAMBIATO DA ACCOUNTING A SALES
    ---AGGIORNO IL SALARIO DEI DIPENDENTI DI QUEL DIPARTIMENTO

    UPDATE IMP SET SAL=SAL+100 WHERE DEPTNO=:NEW.DEPTNO;

    END;

    Vediamo il contenuto delle tabelle prima di eseguire l’aggiornamento sul dipartimento

    Tabella IMP

    Contenuto tabella IMP prima dell'aggiornamento

    Tabella DIP

    Contenuto tabella DIP prima dell'aggiornamento

    Eseguiamo la seguente query di aggiornamento:

    UPDATE DIP SET DNAME =’SALES’ WHERE DNAME=’ACCOUNTING’

    Il contenuto delle tabelle modificate dal Trigger

    Nuova Tabella IMP

    Contenuto tabella IMP dopo aggiornamento

    Nuova Tabella DIP

    Contenuto tabella DIP dopo l'aggiornamento

    Link Utili sull’installazione di Oracle Database 10g Express Edition.

    E’ possibile scaricare e installare Oracle Database 10g Express Edition.

    Link Utili documentazione Oracle Database 10g Express Edition