|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
salut à tous,
Je reviens vers vous car j'ai du mal avec une requête!! J'ai une table qui a plusieurs colonnes dont (NOM_PIECE,FLAG_LIGNE et FLAG_PIECE(initialement à '0') ) et je voudrais mettre à jour FLAG_PIECE dans toute la table comme suit : En prenant Pièce par pièce : FLAG_PIECE devra être = à MAX(FLAG_LIGNE) après MAJ , mais si toutes les lignes d'une même pièce ont FLAG_LIGNE = '0', ce n'est pas la peine de faire la MAJ puisque FLAG_PIECE est initialement = '0'. J'ai essayé de le faire avec un curseur : Code :
La table fait plus de 5 millions de lignes. et bien sur il y a deux index : le premier sur (STATUS, NOM_PIECE) le second sur (NOM_PIECE). |
||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Quelle version d'oracle ? Si 10g+ utilise merge :
Code :
Code :
[edit]j'avais oublié le when matched then UPDATE... |
||||
|
|
00
|
|
|
#3 | ||
![]() ![]() |
Évidemment que c'est lent, vous avez un premier curseur pour récupérer vos noms de pièce, puis une requête appelée à chaque ligne pour récupérer le max, et enfin la mise à jour qui tombe.
SQL est un langage ensembliste. Il faut que vous le compreniez sinon vous n'aurez jamais de bonnes performances. Tout votre bloc s'écrit ainsi : Code :
__________________
Email : http://scr.im/waldar |
||
|
20
|
|
|
#4 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Au fait Waldar a raison, le WHERE mt1.STATUS = 'NEW' doit être placé après le SET pour correspondre à ton process initial et pas dans la requête USING
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
Merciiiiiiii, je vais l'essayer de suite!!!
|
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
j'ai essayé de comprendre l'instruction Merge , mais je n'y arrive pas.
Qlq aurait la gentillesse de me donner un exemple bien clair? merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com