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 :

ORACLE et TRIGGER


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Par défaut ORACLE et TRIGGER
    Bonjour et merci d'avance de vos réponses.
    Je vous soumet mon problème :
    Je voudrais créer un déclencheur qui me permettrait de mettre à jour plusieurs lignes d'une même table qui ont un champ en commun.
    Explication :
    5 champs : id,id_ref,lib,lieu,auteur
    le champ id est unique
    le champ id_ref correspond à l'enregistrement principal
    exemple concret :

    id | id_ref | lib | lieu | auteur
    ____________________________________
    1 | 1 | voiture | 78 | eric
    2 | 1 | voiture | 78 | yan
    3 | 1 | voiture | 78 | chris
    4 | 4 | camion | 95 | marc
    5 | 5 | avion | 77 | chris
    etc..

    comme vous pouvez le constatez, les lignes 2 et 3 sont la copie conforme de la ligne 1 à l'exception du champ auteur
    Ce que je voudrais réussir à faire, c'est modifier les champs "lib" et "lieu" des lignes qui ont le même "id_ref". En clair, je modifie la ligne 1 et les champs des ligne 2 et 3 se modifient aussi (la colonne "id_ref" servant de reference dans ma requete de mise à jour...)

    j'ai essayé un trigger after mais pas moyen de faire une boucle pour un update sur les lignes qui ont l' "id_ref" identique à :old.id
    erreur de table en mutation

    Comment peut-on parcourir une table qui vient d'être mise à jour ?
    Doit-on le faire avant ?

    voila j'espère avoir été clair dans mes explications.

    Encore merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Avez-vous lu les règles du forum ?
    Avez-vous étudié ce tutoriel ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Par défaut
    Désolé pour mes erreurs.
    J'ai en effet oublié d'indiquer la version de mes outils.
    J'étais tellement pris dans mes explications que j'ai essayé de rendre le plus claire possible que j'ai commis cette erreur.
    Encore désolé.
    Concernant les tutoriels, j'ai déja consulté la page auquelle vous faite référence.
    Le problème des exemples qui sont cités concernent plusieurs tables.

    Dans mon problème, il s'agit de la même table.
    Je vais essayé le principe de la table temporaire.

    j'utilise oracle 8.1.7

    Encore désolé et merci de m'avoir répondu

  4. #4
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Bonjour,

    Votre problème met plutôt en avant une erreur de conception de votre modèle.
    Il est souhaitable d'éviter la redondance d'informations et votre solution va plutôt dans le sens contraire.

    Essayez donc de revoir votre modèle de données si possible

    Bon courage

  5. #5
    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
    Il y a déjà eu un post là dessus.
    Je ne sais plus exactement comment il avait été résolu, mais c'était avec des triggers BEFORE puis AFTER.
    Le plus bourrin : Tu crées un colonne MAJ que tu mets à jour lors de l'update si les champs changent.
    Trigger AFTER UPDATE, tu relances un update sur toute la table pour les lignes qui ont un champ MAJ not null

  6. #6
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    http://www.developpez.net/forums/sho...d.php?t=275878

    Une solution supplémentaire à celle proposée dans l'article mentionné plus haut est proposée ici.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/07/2006, 16h44
  2. Oracle 9: Trigger pour audit trail
    Par ChrisD dans le forum Oracle
    Réponses: 7
    Dernier message: 18/01/2006, 14h28
  3. [Oracle 9i] Trigger base de données
    Par Herveg dans le forum Oracle
    Réponses: 7
    Dernier message: 21/12/2005, 15h17
  4. Réponses: 2
    Dernier message: 08/12/2005, 14h12
  5. [Oracle 9i] Triggers sur les updates de tables
    Par zestrellita dans le forum Oracle
    Réponses: 12
    Dernier message: 07/12/2005, 11h32

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