L3 Info : SGBD
 
◃  Ch. 12 Oracle PL/SQL  ▹
 

Les triggers INSTEAD OF

  • Comme pour PostgreSQL, triggers dédiés aux vues pour les rendre éditables par INSERT, UPDATE et DELETE
  • Aucun retour (même pas NULL)
  • Toujours déclenchés BEFORE et FOR EACH ROW
  • Exemple :
    CREATE VIEW ResponsableDiplome AS 
        SELECT prof_nom, prof_prenom, dip_nom, dip_discipline 
        FROM professeur NATURAL JOIN diplome;
    SELECT * FROM ResponsableDiplome;
    +--------+-----------+-------+--------------+
    |PROF_NOM|PROF_PRENOM|DIP_NOM|DIP_DISCIPLINE|
    +--------+-----------+-------+--------------+
    |Jay     |Véronique  |Licence|Info          |
    |Amanton |Laurent    |Master |Info          |
    +--------+-----------+-------+--------------+
    CREATE TRIGGER tg_resp_dip INSTEAD OF UPDATE ON ResponsableDiplome
    FOR EACH ROW
     BEGIN
        IF :NEW.dip_discipline <> :OLD.dip_discipline THEN
            UPDATE diplome SET dip_discipline=:NEW.dip_discipline 
                           WHERE dip_nom=:OLD.dip_nom AND
                               dip_discipline = :OLD.dip_discipline;
        END IF;
    END;
  • Mis en place de ces triggers pas toujours nécessaires : Oracle permet d'éditer les vues modifiables
  • Pour Oracle, une vue modifiable respecte au moins les conditions suivantes :
    • Ne contient aucune agrégation
    • Ne contient aucun DISTINCT
    • Ne contient aucune fonction de groupe
    • Ne contient aucune expression calculée (col1 + col2 AS total, par exemple).
    • Ne contient aucune sous-requête dans la clause SELECT.
    • Toutes les colonnes non nullables de la table sous-jacente figurent dans la vue.