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 :

Syntaxe d'un trigger


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 98
    Par défaut Syntaxe d'un trigger
    Bonjour,
    Je ne suis pas spécialement doué avec les triggers et je dois en faire un pas facile pour moi.
    Pouvez-vous me dire pourquoi il ne fonctionne pas ?
    Mon but:
    Lorsque je change la valeur AREA d'un enregistrement de la table RM, je dois aller vérifier dans la table GROS la valeur du champs IS_FME, si celui-ci =0, alors je dois calculer la somme AREA de tous les champs pour lesquels le BL_ID et le FL_ID correspondent et l'insérer dans la table GROS.
    BL_ID étant le bâtiment, FL_ID étant l'étage.
    J'ai mis un LIKE % sur le FL_ID car l'étage est divisé en plusieurs parties et le numéro est le dernier caractère de celui-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    create or replace trigger t_update_SP_gros
    after INSERT or DELETE OR update OF area on RM
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    BEGIN
     
    UPDATE GROS SET AREA=(SELECT sum(area)*110/100 FROM rm WHERE rm.bl_id=':new.bl_id' AND rm.fl_id like '%:new.fl_id')
    WHERE gros.bl_id=':new.bl_id' AND gros.fl_id LIKE '%:new.fl_id' AND is_fme=0;
     
     
    END;
    Erreur du Serveur: XXXXX: table RM is mutating, trigger/function may not see it
    ORA-06512: at "T_UPDATE_SP_GROS", line 3
    ORA-04088: error during execution of trigger 'AFM.T_UPDATE_SP_GROS'


    Enregistrement:
    bl_id = <BCH>
    rm_id = <1103>
    fl_id = <_1>
    c_porte = <BCH 1103>
    name = <ENSEIGNEMENT>
    x_code_usuel = <>
    x_motcle = <F>
    comments_adm = <>
    dwgname = <BCH_01ZP>
    ehandle = <268FD>
    dv_id = <10600>
    dp_id = <10621>
    option1 = <1103>
    area = <171.88>
    layer_name = <RM>
    length = <56.3>

    Ancienne Clé Principale:
    <BCH><_1><1103>

  2. #2
    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
    2 choses : 1 chaine de caractère reste une chaine, elle ne sera jamais évaluée lorsqu'elle est directement dans un ordre sql.
    Donc ':new.jifejdfie' vaut ':new.jifejdfie'

    Dans les triggers, donc il faut simplement utiliser :new.colonne

    Deuxième chose : Mutating table, une recherche sur le forum ou google te donnera 200000 posts : Tu ne peux pas lire (dans un trigger) une table qui est en train d'être modifiée/créée/deletée par ton trigger.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/02/2009, 12h53
  2. Erreur de syntaxe dans un trigger
    Par bastiii dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 10/09/2008, 08h47
  3. la syntaxe de mon trigger est fausse !
    Par mennou dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/06/2008, 18h40
  4. Syntaxe d'un trigger
    Par mat777 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/12/2007, 11h48
  5. Syntaxe pour un TRIGGER
    Par Loki13 dans le forum Développement
    Réponses: 3
    Dernier message: 11/05/2006, 15h59

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