-
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
-
Avez-vous lu les règles du forum ?
Avez-vous étudié ce tutoriel ?
-
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
-
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
-
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
-
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.
-
ç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
-
fini
Le principe de la procédure avec l'option PRAGMA AUTONOMOUS_TRANSACTION
fonctionne très bien !!
merci à tous