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 :

problème de mutation causé par un trigger


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut problème de mutation causé par un trigger
    bonsoir , j'ai fait un trigger pour faire des calculs sur des champs dans une table
    les calculs sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update pay_professeur2 set masse_horaire_restante = masse_horaire_totale - (masse_horaire_effectue + masse_horaire_precedents);
     
    update pay_professeur2 set honoraire = masse_horaire_effectue * 13.5;
     
    UPDATE pay_professeur2 
    SET honoraire_globale = (SELECT sum(honoraire) FROM pay_professeur 
    WHERE pay_professeur.id_professeur IN (SELECT id_professeur FROM professeur));
    mon premier essaie été de faire un trigger sur cette table même incluant ces intructions , alors j'ai obtenu un problème de mutation . j'ai pensée alors a faire une table clone qui va stocker les calculs et exercer le trigger sur la première table . voila le code :
    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
     
    create or replace trigger pay_prof_up2
      after insert  or update on pay_professeur for each row
    declare 
     var number ;
    begin
    insert into pay_professeur2 (id_professeur,nom_matiere,masse_horaire_totale,masse_horaire_precedents,masse_horaire_effectue) values 
     
    (:new.id_professeur,:new.nom_matiere,:new.masse_horaire_totale,:new.masse_horaire_precedents,:new.masse_horaire_effectue) ;
     
    update pay_professeur2 set masse_horaire_restante = masse_horaire_totale - (masse_horaire_effectue + masse_horaire_precedents);
     
    update pay_professeur2 set honoraire = masse_horaire_effectue * 13.5;
     
     
    UPDATE pay_professeur2 
    SET honoraire_globale = (SELECT sum(honoraire) FROM pay_professeur 
    WHERE pay_professeur.id_professeur IN (SELECT id_professeur FROM professeur));
     
    End;
    /
    mais j'ai toujours un problème de mutation de table ce que je comprend pas .
    quelqu'un peut m'expliquer ?

  2. #2
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    personne ne visualise le forum ce soir ?

  3. #3
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjur,

    Voir ici une possible reponse

    http://sgbd.developpez.com/oracle/ora-04091/

  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
    Tu ne peux pas faire un SELECT/UPDATE/INSERT sur une table actuellement utilisée par le trigger FOR EACH ROW.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE TRIGGER pay_prof_up2
      after INSERT  OR UPDATE ON pay_professeur FOR each row
    ...
    SELECT sum(honoraire) FROM pay_professeur 
    ..

  5. #5
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    je pense faire un procedure au coeur du trigger qui parcour la table et fait la mise a jours. cela peut eviter la mutation ? . en tout cas je vais commencer par essayer ca .

  6. #6
    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
    Même réponse :
    Tu ne peux pas faire un SELECT/UPDATE/INSERT sur une table actuellement utilisée par le trigger FOR EACH ROW.

    Cas particulier : La procédure est en transaction autonome (En gros elle lit/écrit les données comme si c'était une autre session)
    Dans ce cas, cette procédure ne lira pas les données actuellement mises à jour par la session du trigger

Discussions similaires

  1. Problème causé par feuille de style externe.
    Par kos2000 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 24/03/2015, 17h18
  2. [1.x] Problème dans la partie backend causées par les relations M:M
    Par adrimax dans le forum Symfony
    Réponses: 2
    Dernier message: 12/03/2012, 15h13
  3. [debutant][servlet]erreur causée par une listBox
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2004, 10h53
  4. Problèmes création de procédures et de triggers
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 06/11/2003, 10h42
  5. problème de connection mysql par tcp/ip
    Par leroyphil dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2003, 18h27

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