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

SQL Oracle Discussion :

Comment supprimer plusieurs enregistrement par triggers sans avoir l'erreur Table Mutante ORA-04091


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment supprimer plusieurs enregistrement par triggers sans avoir l'erreur Table Mutante ORA-04091
    Bonjour,

    j'ai une table LISTE_SERVICE qui gèrent les appartenances des personnes à des services d'une société :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE LISTE_SERVICE 
       (    "SERVICE " VARCHAR2(55 BYTE) NOT NULL ENABLE, 
        "USER" VARCHAR2(255 BYTE) NOT NULL ENABLE, 
         PRIMARY KEY ("SERVICE ", "USER")
    Par trigger lorsque qu'une personne qui un SERVICE particulier, je voudrais la supprimer d'autres services automatiquement :
    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
    23
    24
    CREATE OR REPLACE TRIGGER del_service
        BEFORE
        DELETE ON LISTE_SERVICE
    FOR EACH ROW
      declare
              p_user   VARCHAR2(51);
              p_service  VARCHAR2(51);
     
    BEGIN
      p_user   := :old.user;
      p_service  := :old.service;
     
      -- suppression du service MAINTENANCE
      IF (p_service = 'MAINTENANCE') THEN
        DELETE VP_Lst WHERE service LIKE 'MAINTENANCE$%' and user = p_user;
      END IF;
     
      -- suppression du service SECRETARIAT
      IF (p_service = 'SECRETARIAT') THEN
        DELETE VP_Lst WHERE service LIKE 'SECRETARIAT$%' and user = p_user;
      END IF;
     
    END;
    /
    Bien évidemment, j'obtiens l'erreur :
    ORA-04091: "table %s.%s is mutating, trigger/function may not see it"
    J'ai essayé de passer par une table temporaire avec 2 triggers mais j'ai toujours ce type d'erreur.



    Comment pourrais-je résoudre ce problème?

    Merci de votre aide

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

Discussions similaires

  1. Supprimer plusieurs enregistrements et remplacer par un seul
    Par maestro1303 dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/06/2014, 20h22
  2. comment supprimer plusieur enregistrements a la fois
    Par medreg dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/03/2011, 08h44
  3. Réponses: 3
    Dernier message: 09/02/2010, 20h01
  4. comment supprimer plusieurs enregistrements
    Par NABIL74 dans le forum Bases de données
    Réponses: 20
    Dernier message: 19/01/2009, 13h58
  5. HELP!Comment supprimer des enregistrements de tables jointes
    Par ROOTPARIS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/06/2004, 16h41

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