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 pour mettre à jour un champ calculé [10g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut Syntaxe d'un trigger pour mettre à jour un champ calculé
    Bonjour à tous,

    J'étais donc partie pour construire un trigger qui me paraissait simple... mais en fait ça ne fonctionne pas!

    J'ai une table ROUTE composée de 3 champs : LARGEUR, LONGUEUR, SURFACE
    L'idée est qu'à chaque modification de la table, le champ SURFACE est calculé à partir des champs LARGEUR et LONGUEUR

    Donc voici le trigger que j'ai construit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create OR REPLACE trigger TR_SURF
    before insert or update on ROUTE for each row
    Begin
    :new.SURFACE:=select(R.LARGEUR * R.LONGUEUR)
    FROM ROUTE R;
    End;
    /
    Il y a donc une erreur de compilation à la création du trigger, et toad me dit "PLS-00103: Symbole "SELECT" rencontré à la place d'un des symboles suivants:...."

    Pouvez-vous m'aider à résoudre ce problème?...

    Merci d'avance,

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Un trigger est comme une procédure.
    En PLSQL, on affecte une valeur d'un select par un SELECT INTO
    Exemple (qui n'est pas utilisable dans ton cas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select(R.LARGEUR * R.LONGUEUR) INTO :new.SURFACE FROM ROUTE R;
    Petite précision, un SELECT INTO sans clause WHERE, ce n'est pas bon.

    Dans un trigger for each rows, tu accèdes et modifies les valeurs insérées ou mises à jour par lecture ou affectation des variables (:new.colonne et :old.colonne)
    Donc tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :new.SURFACE := :new.largeur * :new.longueur;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Merci pour ta réponse, en effet c'est parfait!

    Je note pour la prochaine fois, encore merci

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

Discussions similaires

  1. Bouton pour mettre à jours un champ de la base de données
    Par debutantjak dans le forum ASP.NET
    Réponses: 9
    Dernier message: 25/11/2011, 16h48
  2. Réponses: 3
    Dernier message: 29/10/2011, 14h24
  3. Réponses: 2
    Dernier message: 12/09/2011, 15h47
  4. [AC-2010] fonction pour mettre à jour un champ en majuscule
    Par bremmo76 dans le forum Access
    Réponses: 6
    Dernier message: 23/09/2010, 22h53
  5. utilise le composant updatesql pour mettre à jour un champ
    Par andyafrique dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/10/2006, 12h48

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