|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Inscription : mars 2002 Messages : 560 ![]() |
Bonjour,
J'ai la problématique suivante sous Oracle : J'ai une table T1(ID,CODE) qui ne contient pas le bon CODE. Je veux donc mettre à jour ce code sachant que T1 n'est reliée à aucune autre table. Seule solution pour moi : créer une table temporaire. TEMP(ID,CODE,NOUVEAU_CODE). Ce que j'ai fait par la syntaxe suivante, mais mon problème c'est que ma table est vide bien que mon client TOAD me dise que les lignes sont bien insérées dans ma table temporaire : Code :
Code :
Ce que je veux c'est faire un update en masse et la requête suivante ne donne rien : Code :
UPDATE AGREGATION_PNB SET C_CLIENT = (SELECT TEMP_AGR.C_CLIENT FROM TEMP_AGR, AGREGATION_PNB A WHERE TEMP_AGR.ID = A.C_ID_AGREGATION) |
||||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
pourquoi tu passes par une table temporaire ?
|
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Pourquoi tu ne rajoutes pas une autre colonne TEMP où tu pourrais faire une copie des données d'origine de CODE puis faire des mises à jour sur CODE puis suppression de TEMP ?
|
|
|
00
|
|
|
#4 | ||||||
|
Membre habitué
![]() Inscription : mars 2002 Messages : 560 ![]() |
Jerome,
Merci pour ta réponse mais ça voudrait dire que je dois modifier la structure de ma table T1 ? Ce qui n'est pas l'idéal... Pour récapituler T1=AGREGATION_PNB AGREGATION_PNB est remplie automatiquement par une requête mais le problème c'est que la requête ne me donne pas ce que je veux donc je dois faire cette mise à jour moi-même. Si évidemment je peux me passer de la table temporaire je veux bien mais comment ? Bon, reprenons voilà la table AGREGATION_PNB(C_ID_AGREGATION,C_CLIENT) dont je ne donne pas toutes les colonnes car pas utile. Cette table a une clé primaire C_ID_AGREGATION mais c'est tout. Lorsque cette table est remplie, j'ai par exemple : Code :
C_CLIENT ne contient pas les bonnes données. Dans mon MCD, il existe une table client CLIENT(C_ID_CLIENT, C_CLIENT) et en fait C_CLIENT(AGREGATION_PNB) = C_ID_CLIENT(CLIENT) ce qui est faux. On devrait avoir C_CLIENT(AGREGATION_PNB) = C_CLIENT(CLIENT) ! Voilà ma table CLIENT par exemple : Code :
Code :
Merci pour vos suggestions. |
||||||
|
|
00
|
|
|
#5 | ||
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 50 ![]() |
Essayez peut-être la syntaxe suivante :
Code :
|
||
|
|
00
|
|
|
#6 | |
|
Membre éclairé
![]() Inscription : août 2005 Messages : 316 ![]() |
Citation:
c'est pourquoi utiliser une table temporaire et non une table classique en sachant que les données de la table temporaire ne sont visible que depuis la session qui les crées et sont supprimer a la fin de la session ou sur le commit si pas créer avec "on commit preserve rows" |
|
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
non, ce que je voulais dire c'est pourquoi ne pas ajouter la colonne dans la table d'origine, mettre à jour cette colonne et supprimer l'ancienne ?
![]() elle est sensée être rempli comment cette table temporaire ? |
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Inscription : août 2005 Messages : 316 ![]() |
désolé pour l'interpretation erroné
|
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : mars 2002 Messages : 560 ![]() |
Je vous tiens au courant, merci. Je regarde si la syntaxe de wondersonic marche ce qui m'éviterait d'utiliser en effet une table temporaire.
|
|
|
00
|
|
|
#10 | |
|
Membre confirmé
![]() Inscription : mai 2007 Messages : 385 ![]() |
Citation:
Merci de nous tenir au courant. LBO72. |
|
|
|
00
|
|
|
#11 | ||
|
Membre habitué
![]() Inscription : mars 2002 Messages : 560 ![]() |
Ca marche bien joué !!
J'avais un doute sur la jointure : Code :
Merci beaucoup. |
||
|
|
00
|
|
|
#12 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Alors il faut utiliser la conversion implicite dans le sens qui vous intéresse. Il ne faut pas laisser de conversion implicite dans le code ...
__________________
Consultant et formateur Oracle |
|
|
00
|
|
|
#13 | |||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Tout ça pour
Code :
Citation:
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com