IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Ordre de déclenchement triggers


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut Ordre de déclenchement triggers
    Bonjour,

    J'ai un certain nombre de tables sur lesquelles plusieurs triggers vont devoir être déclenchés simultanément (2 ou 3).
    Je suis en ORACLE 10g.
    Jusqu'en V8, le seul contournement dont on disposait pour s'assurer de l'ordre d'exécution des triggers était l'ordre de la création en base (le dernier créé est le dernier à s'exécuter).
    Cette limitation a t'elle été levée avec les nouvelles versions ? Existe t'il un autre moyen de s'assurer de l'ordre d'exécution de triggers sur une même table ?

    Merci par avance !

  2. #2
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Sous 11g - FOLLOWS: http://download.oracle.com/docs/cd/B...4.htm#BABIIAGH

    10g - je crois l'ordre de déclenchement est accidentel

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 462
    Par défaut
    Citation Envoyé par muchmorehuman Voir le message
    Jusqu'en V8, le seul contournement dont on disposait pour s'assurer de l'ordre d'exécution des triggers était l'ordre de la création en base (le dernier créé est le dernier à s'exécuter).
    Cette limitation a t'elle été levée avec les nouvelles versions ? Existe t'il un autre moyen de s'assurer de l'ordre d'exécution de triggers sur une même table ?
    Bonjour

    Se fier à l'ordre de création des déclencheurs me paraît douteux, car même en V10, voici ce que dit la doc Oracle (http://download.oracle.com/docs/cd/B...htm#sthref1179)
    "If you have multiple triggers of the same type on a single table, then Oracle Database chooses an arbitrary order to execute these triggers."
    c'est à dire en français : "Si vous avez plusieurs déclencheurs du même type sur la même table, alors Oracle choisit un ordre d'exécution arbitraire".

    En revanche, les choses changent en V11 !
    http://download.oracle.com/docs/cd/B...s.htm#g1041767
    If you have multiple triggers of the same type on the same table, and the order in which they execute is important, use the FOLLOWS clause. Without the FOLLOWS clause, Oracle Database chooses an arbitrary, unpredictable order.
    La clause FOLLOWS permet d'indiquer que le déclencheur doit s'exécuter après le déclencheur désigné.
    On aura donc une syntaxe du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE TRIGGER trig_secondaire
    BEFORE INSERT ON table_test
    FOR EACH ROW
    FOLLOWS trig_principal
    BEGIN
    ...
    ...
    END;
    /
    Oups, je me suis fait devancer...

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ah, sympa la 11g..
    Bon, il faut que tous les triggers de même timing point aient le FOLLOWS de déclaré, mais c'est sympa quand même.

    Jusqu'en V8, le seul contournement dont on disposait pour s'assurer de l'ordre d'exécution des triggers était l'ordre de la création en base (le dernier créé est le dernier à s'exécuter).
    Oracle ne le garantissait même pas.

Discussions similaires

  1. Ordre du déclenchement des validations Struts
    Par Madgirl dans le forum Struts 1
    Réponses: 0
    Dernier message: 13/10/2010, 19h00
  2. pb déclenchement trigger
    Par highs dans le forum PL/SQL
    Réponses: 1
    Dernier message: 19/04/2010, 12h36
  3. TRIGGER : Ordres de déclenchement
    Par ducho dans le forum Oracle
    Réponses: 1
    Dernier message: 15/11/2005, 14h44
  4. [SQL SERVER] : Problème de déclenchement d'un trigger
    Par sosso971 dans le forum Développement
    Réponses: 1
    Dernier message: 04/11/2005, 08h11
  5. 1er déclenchement d'un trigger d'auto-incrément
    Par babylone7 dans le forum Administration
    Réponses: 11
    Dernier message: 11/03/2004, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo