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

Oracle Discussion :

Trigger After au niveau instruction


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Trigger After au niveau instruction
    Bonjour,

    Alors j'ai cherché sur le forum, mais je n'ai pas trouvé grand chose sur les trigger after ou sur la distinction entre le niveau ligne et niveau instruction (beaucoup d'articles doivent être trop vieux et ne sont plus là).
    En fait je manque un peu d'info sur leur fonctionnement et je me pose des questions existencielles dessus:
    - Comment déclare-ton un trigger au niveau instruction (donc pas "for each row")?
    - Si j'ai bien compris, dans le cas d'un after update, le code du trigger s'exécute après la mise à jour des lignes. Dans ce cas, comment peut-on repérer les lignes qui ont été mises à jour?
    - Les mises à jour sont-elles commitées à la fin de l'update ou à la fin du trigger?

    Je pense que j'ai un peu fait le tour des questions

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    - Comment déclare-ton un trigger au niveau instruction (donc pas "for each row")?
    Tu mets pas le "FOR EACH ROW"

    - Si j'ai bien compris, dans le cas d'un after update, le code du trigger s'exécute après la mise à jour des lignes. Dans ce cas, comment peut-on repérer les lignes qui ont été mises à jour?
    Tu peux pas sans faire un select sur ta table et voir les dernière MAJ. Ce n'est pas le but de ce trigger.

    - Les mises à jour sont-elles commitées à la fin de l'update ou à la fin du trigger?
    Je pense que c'est à la fin du trigger. Essaye de faire planter le trigger, tu verras bien si ça a commité ou pas.

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    1. De la même façon sauf que tu ne précises pas "for each row"
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE TRIGGER trg_ins_upd_matable
    before insert or update on matable
    begin
    null;
    end;
    2. A ma connaissance non (dans ce cas il faut utiliser les triggers for each row)

    3. Je ne comprends pas ta question, tout ce que je peux te dire, c'est que le commit est effectué après toutes l'opération d'update (triggers compris).
    Pour preuve mets un raise_application_error dans un trigger et tu verras que ton insertion n'est pas effectuée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SQL> CREATE OR REPLACE TRIGGER trg_ins_upd_matable
      2  before insert or update on a
      3  begin
      4  raise_application_error (-20000, 'ERREUR');
      5* end;
    Trigger created.
     
    SQL> insert into a values ('x', 'X');
    insert into a values ('x', 'X')
                *
    ERROR at line 1:
    ORA-20000: ERREUR
    ORA-06512: at "COMPTA.TRG_INS_UPD_MATABLE", line 2
    ORA-04088: error during execution of trigger 'COMPTA.TRG_INS_UPD_MATABLE'
     
     
    SQL> select * from a;
     
    COL1                           COL2
    ------------------------------ --------------------------------------------------
    a                              A
    b                              B
    Pour plus d'informations sur les triggers :
    http://sheikyerbouti.developpez.com/pl_sql/?page=Chap6

Discussions similaires

  1. Comportement des triggers de niveau instruction
    Par tchoimars dans le forum SQL
    Réponses: 1
    Dernier message: 12/06/2007, 19h09
  2. Trigger after insert, sans each row, possible ??
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2006, 15h18
  3. TRIGGER After Update
    Par Nounoursonne dans le forum Oracle
    Réponses: 8
    Dernier message: 20/07/2005, 13h33
  4. [9i] problème avec trigger after logon
    Par Michael# dans le forum Oracle
    Réponses: 2
    Dernier message: 17/03/2005, 12h14
  5. Trigger AFTER
    Par Maitre B dans le forum Développement
    Réponses: 2
    Dernier message: 11/06/2004, 09h56

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