Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2271 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Update avec jointure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] Update avec jointure

n°1235354
Arjuna
Aircraft Ident.: F-MBSD
Posté le 31-10-2005 à 20:10:20  profilanswer
 

Pour un coup que c'est moi qui ai besoin d'aide dans cette cat :D
 
Alors voilà, je veux faire ça :

Code :
  1. update prm
  2. set prm.nompro = substr(prm.tradesig2, 1, 30),
  3. prm.tradesig1 = prm.tradesig3
  4. from pro
  5. where prm.codsoc = 3
  6. and prm.codlan in ('MAG', 'ENG')
  7. and pro.codsoc = prm.codsoc
  8. and pro.codpro = prm.codpro
  9. and pro.sigfou = 'CADES'


 
Sauf que cette syntaxe doit marcher avec SQL Server 2000, mais pas avec Oracle...
 
C'est quoi la syntaxe Oracle ?
 
Ca marche pas non plus :/

Code :
  1. update prm, pro
  2. set prm.nompro = substr(prm.tradesig2, 1, 30),
  3. prm.tradesig1 = prm.tradesig3
  4. where prm.codsoc = 3
  5. and prm.codlan in ('MAG', 'ENG')
  6. and pro.codsoc = prm.codsoc
  7. and pro.codpro = prm.codpro
  8. and pro.sigfou = 'CADES'


 
Oracle 8.1.7
 
(z'allez voir qu'à tous les coups c'est supporté à partir de la 9i :/)


Message édité par Arjuna le 31-10-2005 à 20:13:34
mood
Publicité
Posté le 31-10-2005 à 20:10:20  profilanswer
 

n°1235358
Arjuna
Aircraft Ident.: F-MBSD
Posté le 31-10-2005 à 20:15:40  profilanswer
 

Vu la prise de tête dans ce topic, je craind fortement que ça n'existe pas :cry:

n°1235359
Arjuna
Aircraft Ident.: F-MBSD
Posté le 31-10-2005 à 20:21:40  profilanswer
 

Ben ?
 
Y'a quoi qui va pas là ?

Code :
  1. update prm
  2. set prm.nompro = (
  3. select substr(prm2.tradesig2, 1, 30)
  4. from prm prm2, pro
  5. where pro.codsoc = prm.codsoc
  6. and pro.codpro = prm.codpro
  7. and pro.sigfou = 'CADES'
  8. and prm2.codsoc = pro.codsoc
  9. and prm2.codpro = pro.codpro
  10. and prm2.codlan = prm.codlan),
  11. prm.tradesig1 = (
  12. select prm2.tradesig3
  13. from prm prm2, pro
  14. where pro.codsoc = prm.codsoc
  15. and pro.codpro = prm.codpro
  16. and pro.sigfou = 'CADES'
  17. and prm2.codsoc = pro.codsoc
  18. and prm2.codpro = pro.codpro
  19. and prm2.codlan = prm.codlan)
  20. where prm.codsoc = 3
  21. and prm.codlan in ('MAG', 'ENG')


 
Il update un peu plus de 30000 lignes au lieu de 270 !

n°1235361
Arjuna
Aircraft Ident.: F-MBSD
Posté le 31-10-2005 à 20:25:45  profilanswer
 

Bon, à priori, la requête était bonne, mais le compteur de mises à jour déconnait...
 
J'ai rajouté une ligne pour être sûr, et maintenant il met bien à jour 270 lignes :)
 

Code :
  1. update prm
  2. set prm.nompro = (
  3. select substr(prm2.tradesig2, 1, 30)
  4. from prm prm2, pro
  5. where pro.codsoc = prm.codsoc
  6. and pro.codpro = prm.codpro
  7. and pro.sigfou = 'CADES'
  8. and prm2.codsoc = pro.codsoc
  9. and prm2.codpro = pro.codpro
  10. and prm2.codlan = prm.codlan),
  11. prm.tradesig1 = (
  12. select prm2.tradesig3
  13. from prm prm2, pro
  14. where pro.codsoc = prm.codsoc
  15. and pro.codpro = prm.codpro
  16. and pro.sigfou = 'CADES'
  17. and prm2.codsoc = pro.codsoc
  18. and prm2.codpro = pro.codpro
  19. and prm2.codlan = prm.codlan)
  20. where prm.codsoc = 3
  21. and prm.codlan in ('MAG', 'ENG')
  22. and exists(select null from pro where pro.codsoc = prm.codsoc and pro.codpro = prm.codpro and pro.sigfou = 'CADES')


 
Merci pour votre soutien !
 
(j'espère qu'il y en a au moins un qui a lu la topic :D)

n°1235623
Beegee
Posté le 01-11-2005 à 13:27:15  profilanswer
 

Regarde ici :
 
http://www.psoug.org/reference/update.html
 
Apparemment la 10g contient plein de façons de le faire, faudrait voir ce qui est compatible 8i.

n°1235625
betsamee
Asterisk Zeperyl
Posté le 01-11-2005 à 13:29:11  profilanswer
 

Arjuna a écrit :

Ben ?
 
Y'a quoi qui va pas là ?

Code :
  1. update prm
  2. set prm.nompro = (
  3. select substr(prm2.tradesig2, 1, 30)
  4. from prm prm2, pro
  5. where pro.codsoc = prm.codsoc
  6. and pro.codpro = prm.codpro
  7. and pro.sigfou = 'CADES'
  8. and prm2.codsoc = pro.codsoc
  9. and prm2.codpro = pro.codpro
  10. and prm2.codlan = prm.codlan),
  11. prm.tradesig1 = (
  12. select prm2.tradesig3
  13. from prm prm2, pro
  14. where pro.codsoc = prm.codsoc
  15. and pro.codpro = prm.codpro
  16. and pro.sigfou = 'CADES'
  17. and prm2.codsoc = pro.codsoc
  18. and prm2.codpro = pro.codpro
  19. and prm2.codlan = prm.codlan)
  20. where prm.codsoc = 3
  21. and prm.codlan in ('MAG', 'ENG')


 
Il update un peu plus de 30000 lignes au lieu de 270 !


ca fait toujours plaisir ce genre de problemes surtout en prod


Message édité par betsamee le 01-11-2005 à 13:29:36
n°1235641
Beegee
Posté le 01-11-2005 à 13:44:02  profilanswer
 

A la limite il vaut mieux se faire une petite procédure PL/SQL lisible, plutôt qu'une requête pas très lisible à cause des conditions répétées ...

n°1235661
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-11-2005 à 14:04:16  profilanswer
 

c'était juste pour corriger des données, du one shot quoi, donc le PL ça me lourdait pour faire ça ;)

n°1235732
Beegee
Posté le 01-11-2005 à 15:53:49  profilanswer
 

Bah c'est pas la mort :
 

Code :
  1. begin
  2.   for r in (
  3.     select <id>,
  4.            substr(prm.tradesig2, 1, 30) as new_nompro,
  5.            tradesig3 as new_tradesig1
  6.     from prm, pro
  7.     where prm.codsoc = 3
  8.     and prm.codlan in ('MAG', 'ENG')
  9.     and pro.codsoc = prm.codsoc
  10.     and pro.codpro = prm.codpro 
  11.     and pro.sigfou = 'CADES'
  12.   )
  13.   loop
  14.     update prm
  15.     set nompro = r.new_nompro,
  16.         tradesig1 = r.new_tradesig1
  17.     where <id> = r.<id>;
  18.   end loop;
  19. end;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Update avec jointure

 

Sujets relatifs
OLEDB me demande le client Oracle... Mais il est déjà installé !Oracle : OLEDB demande le client, mais je l'ai déjà !
[ORACLE] Ajouter ON DELETE CASCADEOracle SQL+ > Récupérer le contenu d'un champ assez long
[SqlServer] Jointure multi serveurs[Débutant] Comment tester scripts sans installer Oracle ?
concatener du texte à un champ, avec un UPDATE ??Décompresser fichier archive oracle
delete avec jointurefaire un update avec une jointure oracle
Plus de sujets relatifs à : [Oracle] Update avec jointure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR