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

Langage SQL Discussion :

Trigger qui fait bloquer un insert


Sujet :

Langage SQL

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Trigger qui fait bloquer un insert
    Bonjour,

    J'ai fait un trigger sur une table qui permet de remplir un champ selon la valeur de deux autres.
    Or, ce trigger empêche de faire l'insert dans les deux autres champs.
    Voici le trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace TRIGGER DUREE_MISSION AFTER
    INSERT OR UPDATE OF heureDepart, heureArrivee ON MISSION
    FOR EACH ROW
    DECLARE 
    dureeMis NUMBER(10,4);
    BEGIN
      dureeMis := to_number((:new.heureArrivee - :new.heureDepart)*24);
      UPDATE MISSION SET dureeMission = dureeMis
      WHERE idMission = :new.idMission;
    END ;
    Erreur SQL : ORA-04091: table MISSION is mutating, trigger/function may not see it
    ORA-06512: at "DUREE_MISSION", line 5
    ORA-04088: error during execution of trigger 'DUREE_MISSION'
    04091. 00000 - "table %s.%s is mutating, trigger/function may not see it"
    *Cause: A trigger (or a user defined plsql function that is referenced in
    this statement) attempted to look at (or modify) a table that was
    in the middle of being modified by the statement which fired it.
    *Action: Rewrite the trigger (or function) so it does not read that table.

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Pourquoi faire un trigger pour calculer cette colonne

    Remplace le trigger par une alimentation directe et le tour est joué

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Dans le trigger il ne faut pas utiliser l'UPDATE, mais directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :new.dureeMission := to_number((:new.heureArrivee - :new.heureDepart)*24);
    Après le trigger n'est effectivement pas forcément pertinent.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Stocker une colonne calculée n'est pas non plus pertinent !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Trigger qui fait bugger la console
    Par MiniJulie dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/02/2012, 13h08
  2. [oracle 9i] Un trigger qui fait planter oracle !
    Par isoman dans le forum PL/SQL
    Réponses: 10
    Dernier message: 29/05/2008, 09h26
  3. Creation d'un trigger qui fait appel java
    Par titexe dans le forum PL/SQL
    Réponses: 2
    Dernier message: 11/04/2008, 07h33
  4. Réponses: 9
    Dernier message: 20/10/2006, 14h32
  5. [Res]Procédure stockée qui fait un insert basé sur un select
    Par wonderliza dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 18h25

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