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?
    Consultant et formateur Oracle

  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"?
    Consultant et formateur Oracle

  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?
    Consultant et formateur Oracle

  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
    Consultant et formateur Oracle

  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