Les triggers en oracle

Pages: 5 (1237 mots) Publié le: 18 mars 2013
Quelques précisions concernant …

Les triggers en Oracle
1. Introduction
À la suite du laboratoire concernant les triggers sous Oracle, voici quelques précisions pour bien comprendre et préparer votre examen en base de données. Les informations ci-dessous se basent sur la documentation officielle d’Oracle disponible sur le site http://www.oracle.com/pls/db102/homepage. Lors de la correctiondu laboratoire, les informations décrites ci-dessous ont été prises en compte.

2. Les types de triggers
Il existe deux types de triggers différents : les triggers de table (STATEMENT) et les triggers de ligne (ROW). Quelle est la différence ? • Les triggers de table sont exécutés une seule fois lorsque des modifications surviennent sur une table (même si ces modifications concernent plusieurslignes de la table). Ils sont utiles si des opérations de groupe doivent être réalisées (comme le calcul d’une moyenne, d’une somme totale, d’un compteur, …). Pour des raisons de performance, il est préférable d’employer ces triggers plutôt que les triggers lignes. • Les triggers lignes sont exécutés « séparément » pour chaque ligne modifiée dans la table. Ils sont très utiles s’il faut mesurer uneévolution pour certaines valeurs, effectuer des opérations pour chaque ligne en question.

Lors de la création de triggers lignes, il est possible d’avoir accès à la valeur ancienne et la valeur nouvelle grâce aux mots clés OLD et NEW. Il n’est pas possible d’avoir accès à ces valeurs dans les triggers de table. Exemple de trigger table : CREATE TRIGGER log AFTER INSERT OR UPDATE ON Emp_tabBEGIN INSERT INTO log(table, date, username, action) VALUES ('Emp_tab', sysdate, sys_context('USERENV', 'CURRENT_USER'), 'INSERT/UPDATE on Emp_tab') ; END ; Ce trigger table enregistre dans une table log la trace de la modification de la table Emp_tab. On mémorise ici le moment de la modification et l’utilisateur qui l’a provoqué. Il n’est donc exécuté qu’une seule fois par modification de la tableEmp_tab.

1

3. La construction d’un trigger
3.1 Les conditions d’un trigger
Le trigger se déclenche lorsqu’un événement précis survient : BEFORE UPDATE, AFTER DELETE, AFTER INSERT, … Ces événements sont importants car ils définissent le moment d’exécution du trigger. Ainsi, lorsqu’un trigger BEFORE INSERT est programmé, il sera exécuté juste avant l’insertion d’un nouvel élément dans latable. Pour rappel, INSERT UPDATE DELETE lorsqu’un trigger ligne est mentionné à Pas d’accès à l’élément OLD (qui n’existe pas) Accès possible à l’élément OLD et NEW Pas d’accès à l’élément NEW (qui n’existe plus)

3.2 Le code du trigger
Le trigger Oracle doit être écrit en PL/SQL. La forme d’un trigger est encore très dépendante du SGBD utilisé. Exemple de trigger ligne (adapté de [1]): CREATE ORREPLACE TRIGGER Print_salary_changes BEFORE UPDATE ON Emp_tab FOR EACH ROW WHEN (new.Empno > 0) DECLARE sal_diff number; BEGIN sal_diff := :new.sal - :old.sal; dbms_output.put(' Old : ' || :old.sal || 'New : ' || :new.sal || 'Difference : ' || sal_diff); END ; Ce trigger est déclenché lorsque la table Emp_tab est mise à jour. Pour chaque modification (lignes mises à jour), le trigger va calculerpuis afficher respectivement l’ancien salaire, le nouveau salaire et la différence entre ces deux salaires. La condition précisée (WHEN new.Empno > 0) restreint le déclenchement du trigger (exécuté uniquement si new.Empno > 0) Remarques : • Un trigger ligne ne peut accéder à une table mutante. Dans [1], on peut lire : « A mutating table is a table that is being modified by an UPDATE, DELETE orINSERT statement, or a table that might be updated by the effects of a DELETE CASCADE constraint. (…) The session that issued the triggering statement cannot query or modify a mutating table. This restriction prevents a trigger from seeing an inconsistent set of data. (…) » Il faut donc comprendre qu’il n’est pas permis de consulter ou modifier une table mutante. Cette restriction préservera le...
Lire le document complet

Veuillez vous inscrire pour avoir accès au document.

Vous pouvez également trouver ces documents utiles

  • Oracle
  • Oracle
  • Oracle
  • oracle
  • Oracle
  • Oracle
  • Oracle
  • Oracles

Devenez membre d'Etudier

Inscrivez-vous
c'est gratuit !