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 :

Trigger after delete


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Trigger after delete
    Bonjour,

    Voila mon problème :

    J'ai 2 triggers sur une même table

    -Un after insert,update,delete for each row
    -Un after insert,updat,delete

    Lorsque j'effectue un delete sur la table concernée, le trigger qui s'effectue sur toute la table (le 2eme) est exécuté 2 fois :
    - Une fois en passant dans la partie If updating ... end if;
    - Une autre fois en passant dans la partie If deleting... end if;

    Comment se fait-il qu'il soit exécuté comme si un update avait été fait?

    Je précise qu'aucun update sur la table n'est effectué dans le code de ce trigger.

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    comment vous vous rendez compte que le trigger s'exécute deux fois?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai mis des instructions dms_output.put_line et j'ai fait un delete sur ma table. En regardant le output, je vois qu'il s'execute 2 fois (2 fois les traces).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    DBMS_OUTPUT a bien été mis dans la partie if updating ...end if?
    Avez vous essayé de produire deux sorties différentes dans les deux parties de code "if updating" et "if deleting"?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui c'est ce que j'ai fait.

    J'ai mis un dbms_output affichant "debut" au tout debut du trigger.

    J'ai mis "udpate" dans le if updating ... end if

    J'ai mis "delete" dans le if deleting... end if

    Mon resultat :

    debut
    update
    debut
    delete

    Précisions : Je suis avec une version 8.1.7 d'oracle

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    Il n'y a pas de contraintes référentielle de la table sur elle-même?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je n'ai pas de contrainte réferentielle sur la table elle même. J'ai des contraintes vers d'autres tables.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    Il reste un seul cas en dehors des triggers:
    Une contrainte référentielle sur la table t1 qui référence une autre soit t2. Maintenant si un "delte" de la table t1 provoque un "delete" de la table t2 qui à son tour et à cause de la contrainte référentielle sur t1 provoquerait un update si la contrainte est définie on delete set null

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé.

    En fait il y a une contrainte réferentielle sur une autre table t2 avec un delete cascade. Le delete sur ma premiere table t1 declenche un delete des enregistrements fils sur t2. Il y a un trigger on delete sur t2. Ce trigger effectue un update sur t1 => d'où le déclenchement du trigger after update sur t1.

    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.1] Unknown Table OLD - Trigger AFTER DELETE
    Par poissonjone77 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 28/06/2013, 11h59
  2. [ON DELETE] vues, tables, trigger AFTER DELETE
    Par cedy-kassy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/06/2012, 12h10
  3. Problème Update dans un trigger After Delete
    Par gouzou38 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/05/2011, 15h52
  4. Trigger After Update avec la table Deleted vide ?
    Par azur668 dans le forum Développement
    Réponses: 4
    Dernier message: 24/06/2009, 23h41
  5. [8i] Trigger before ou after delete
    Par Débéa dans le forum Oracle
    Réponses: 3
    Dernier message: 15/02/2006, 13h49

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