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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 11
    Points
    11
    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
    Points : 3 597
    Points
    3 597
    Par défaut
    Avez-vous lu les règles du forum ?
    Avez-vous étudié ce tutoriel ?

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 11
    Points
    11
    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 expérimenté 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
    Points : 1 738
    Points
    1 738
    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
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  5. #5
    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
    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
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Membre émérite 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 : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    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.
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 11
    Points
    11
    Par défaut ça avance
    Merci à tous pour vos réponses.
    Il m'est à ce jour impossible de revoir mon modèle de conception car la problèmatique que je soulève vient d'une mise à jour des règles de marché et de ce fait, reconstruire un modéle de base reviendrait à recommencer tout le travail deja effectué. De plus, la nécessité de dupliquer des lignes puis de les mettre à jour se fera sur une période très courte réglementée par décret (tout au plus 10 jours).
    Je ne pensais pas que la mise à jour multiligne par trigger poserait un problème.
    Cela étant, le principe de la procédure avec l'option PRAGMA AUTONOMOUS_TRANSACTION me parait une solution intéressante.

    Je vous tiens au courant.

    Merci encore

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 19
    Points : 11
    Points
    11
    Par défaut fini
    Le principe de la procédure avec l'option PRAGMA AUTONOMOUS_TRANSACTION
    fonctionne très bien !!

    merci à tous

+ 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