|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 17 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 17 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
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 |
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 17 ![]() |
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 |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 17 ![]() |
Le principe de la procédure avec l'option PRAGMA AUTONOMOUS_TRANSACTION
fonctionne très bien !! merci à tous |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com