Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 08/02/2012, 10h52   #1
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 311
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 311
Points : 74
Points : 74
Par défaut Update avec une jointure externe

Bonjour,

j'aurais besoin de mettre à jour un champ grâce à une valeur récupérée d'une autre table.

Le code :
Code :
1
2
3
4
5
6
7
 
UPDATE invoice LEFT OUTER JOIN EXCHANGE_RATE_MONTH_RMB
            ON EXCHANGE_RATE_MONTH_RMB.FROM_CURRENCY_CODE = 'EUR'
            AND EXCHANGE_RATE_MONTH_RMB.TO_CURRENCY_CODE = 'RMB'
            AND invoice_date BETWEEN EXCHANGE_RATE_MONTH_RMB.BEGIN_DATE AND EXCHANGE_RATE_MONTH_RMB.END_DATE
SET invoice.cost_price = cost_price * EXCHANGE_RATE_MONTH_RMB.EXCHANGE_RATE
WHERE invoice.invoice_date < '31/12/2009';
Le code est "bon" càd que je récupère bien (dans la théorie) les informations dont j'ai besoin.
Par contre, j'obtiens un message d'erreur :
Citation:
ORA-00971: mot-clé SET absent
En faisant quelques petites recherches, il semblerait que ça ne soit pas trop possible de faire de cette manière. Donc, comment est-ce que je suis censé faire ça ?

Merci bien !
feldi est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 11h10   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 274
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 274
Points : 1 934
Points : 1 934
En utilisant MERGE
Que donne :
Code :
1
2
3
4
5
6
7
8
9
merge INTO invoice i
USING (SELECT EXCHANGE_RATE, BEGIN_DATE, END_DATE
         FROM EXCHANGE_RATE_MONTH_RMB
        WHERE FROM_CURRENCY_CODE = 'EUR'
          AND TO_CURRENCY_CODE = 'RMB') u
   ON (i.invoice_date BETWEEN u.BEGIN_DATE AND u.END_DATE)
 when matched then UPDATE
  SET i.cost_price = i.cost_price * u.EXCHANGE_RATE
WHERE i.invoice_date < to_date('31/12/2009','dd/mm/yyyy')
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/02/2012, 11h33   #3
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 311
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 311
Points : 74
Points : 74
C'est parfait merci !
feldi 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 21h00.


 
 
 
 
Partenaires

Hébergement Web