Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2007, 18h04   #1
Invité de passage
 
Inscription : juin 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 17
Points : 3
Points : 3
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
RSI06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 19h38   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Avez-vous lu les règles du forum ?
Avez-vous étudié ce tutoriel ?
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 09h44   #3
Invité de passage
 
Inscription : juin 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 17
Points : 3
Points : 3
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
RSI06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 16h49   #4
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
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
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 13h01   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 13h28   #6
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
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
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2007, 10h31   #7
Invité de passage
 
Inscription : juin 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 17
Points : 3
Points : 3
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
RSI06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 18h45   #8
Invité de passage
 
Inscription : juin 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 17
Points : 3
Points : 3
Par défaut fini

Le principe de la procédure avec l'option PRAGMA AUTONOMOUS_TRANSACTION
fonctionne très bien !!

merci à tous
RSI06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h52.


 
 
 
 
Partenaires

Hébergement Web