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 19/04/2006, 18h16   #1
Membre régulier
 
Inscription : mars 2002
Messages : 172
Détails du profil
Informations personnelles :
Âge : 71
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : mars 2002
Messages : 172
Points : 79
Points : 79
Par défaut Mise à jour d'une table avec une autre

Bonjour,
ce sujet est longuement traité dans les exemples trouvés en recherchant "Singleton" pourtant je ne trouve pas la solution pour le problème que j''expose ci-dessous.
Soit une table
Code :
1
2
3
4
CREATE TABLE TR_GRADE_GRD (
    GRD_ID    D_ID NOT NULL /* D_ID = INTEGER */,
    GRD_DESC  D_GRADE NOT NULL /* D_GRADE = VARCHAR(32) */,
    GRD_NDX   D_ENT_COURT /* D_ENT_COURT = SMALLINT */
qui sert de référence
et une autre table, qui contient les données de l'utilisateur
Code :
1
2
3
4
5
6
CREATE TABLE T_GRADE_GRA (
    GRA_IND_ID   D_ID NOT NULL /* D_ID = INTEGER */,
    GRA_NOM      D_GRADE NOT NULL /* D_GRADE = VARCHAR(32) */,
    GRA_SECTION  D_SECTION NOT NULL /* D_SECTION = VARCHAR(32) */,
    GRA_DATE     D_DATE /* D_DATE = DATE */,
    GRA_NDX      D_ENT_COURT /* D_ENT_COURT = SMALLINT */
Les index "GRA_NDX" et "GRD_NDX" sont identiques.
Si l'utilisateur modifie dans la table de référence, l'intitulé des grades à savoir "GRD_DESC" je souhaiterais pouvoir modifier automatiquement "GRA_NOM" qui lui correspond.
Or le code ci-dessous ne peut remplir ce rôle, puisqu'il renvoie plusieurs lignes
Code :
1
2
3
UPDATE t_grade_gra gra
        SET  gra.gra_nom = (SELECT grd_desc FROM tr_grade_grd
       WHERE gra.gra_ndx=grd_ndx)
Il faudrait parcourir la table t_grade_gra ...pour la mettre à jour éventuellement...
Voilà...j'ai besoin de vos lumières
Merci,
Lucien
Lucien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 09h53   #2
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Lucien,

A mon avis l'utilisation d'un trigger After Update est plus approprié dans ton cas. Un essai à faire.
Code :
1
2
3
4
5
6
7
 
 IF (OLD.GRD_DESC <> NEW.GRD_DESC) THEN
BEGIN
   UPDATE T_GRADE_GRA
       SET  GRA_NOM = NEW.GRD_DESC 
   WHERE
       GRA_NDX = NEW.GRD_NDX;
A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h46   #3
Membre régulier
 
Inscription : mars 2002
Messages : 172
Détails du profil
Informations personnelles :
Âge : 71
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : mars 2002
Messages : 172
Points : 79
Points : 79
Merci Andry, je n'avais pas pensé à cette solution..
Je viens d'essayer avec succès.
C'est à la fois commode et élégant
Trés bonne journée
Lucien
Lucien 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 10h35.


 
 
 
 
Partenaires

Hébergement Web