Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 26/10/2011, 23h48   #1
Membre éclairé
 
Homme Adel SOUFI
Ingénieur d'étude
Inscription : décembre 2010
Messages : 257
Détails du profil
Informations personnelles :
Nom : Homme Adel SOUFI
Âge : 28
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur d'étude
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2010
Messages : 257
Points : 314
Points : 314
Envoyer un message via MSN à adelneo
Par défaut Trigger pour mettre à jour une table à partir d'une autre table

Bonjours Tout le monde
J’ai deux tables qui sont en relation 1-n par la clé id1 (un enregistrement de la table1 correspond à 1 ou plusieurs enregistrements de la table2):
table1 (id1,champ1)
table2 (id2,id1,champ2,champ3)

Ce que je veux obtenir :
Mettre à jour le champ1 (champ1 reçoit a valeur du champ3) après chaque changement de la valeur du champ3 (Insertion, modification).
Je suppose que la meilleure solution est de créer un Trigger, sachant que la modification de l'application qui exploite la BDD m'est impossible en ce moment.

Est il possible de gérée cette situation par Trigger ?
Merci.
adelneo est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2011, 00h06   #2
Membre éclairé
 
Homme Adel SOUFI
Ingénieur d'étude
Inscription : décembre 2010
Messages : 257
Détails du profil
Informations personnelles :
Nom : Homme Adel SOUFI
Âge : 28
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur d'étude
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2010
Messages : 257
Points : 314
Points : 314
Envoyer un message via MSN à adelneo
Voici le code de ce que j'ai pu développer :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
/* Trigger: Table2_BI0 */
CREATE TRIGGER Table2_BI0 FOR Table2
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  UPDATE Table1 SET Table1.Champ1=new.Champ3
  WHERE Table1.Id1=new.Id1;
end
^
 
 
/* Trigger: Table2_BU0 */
CREATE TRIGGER Table2_BU0 FOR Table2
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
IF (new.Champ3<>old.Champ3) then /*  Si Changement de Champ3 */
begin
   UPDATE Table1 SET Table1.Champ1=new.Champ3
   WHERE Table1.Id1=new.Id1;
end
end
^
Je vais attendre vos suggestions avant de mettre Résolu
adelneo est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2011, 07h56   #3
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 620
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 620
Points : 4 525
Points : 4 525
je dirais que le test (new.Champ3<>old.Champ3) n'a pas vraiment d'utilité
sauf si le UPDATE fait énormément de mise à jour
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2011, 14h24   #4
Membre éclairé
 
Homme Adel SOUFI
Ingénieur d'étude
Inscription : décembre 2010
Messages : 257
Détails du profil
Informations personnelles :
Nom : Homme Adel SOUFI
Âge : 28
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur d'étude
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2010
Messages : 257
Points : 314
Points : 314
Envoyer un message via MSN à adelneo
Citation:
Envoyé par SergioMaster Voir le message
je dirais que le test (new.Champ3<>old.Champ3) n'a pas vraiment d'utilité
sauf si le UPDATE fait énormément de mise à jour
J'ai introduit ce test pour éviter d’exécuter la requête : UPDATE Table1 SET Table1.Champ1=new.Champ3
WHERE Table1.Id1=new.Id1; si la valeur du champ3 n'a pas changé.
adelneo est actuellement 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 09h23.


 
 
 
 
Partenaires

Hébergement Web