|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 15 ![]() |
Bonjour,
Je suis confronté à un problème de taille qui dépasse me semble t'il ma compétence. J’essaie de réaliser une piste d'audit dans un group by. Je m'explique : - Je vais faire un sélection CRITERE_1, CRITERE_2,_CRITERE_3, sum(MNT) from TABLE1 group by CRITERE_1, CRITERE_2,_CRITERE_3 - J'aimerais faire un lien me permettant de faire un lien entre la ligne regroupée et le détail de ces lignes. Ce lien devrait se faire par un numéro de regroupement. Exemple : j'attribue un numéro unique pour la première ligne du regroupement par exemple 1001A et je voudrais toper dans un champ dédié l'ensemble des mouvement constituant le résultat dans ma table 1 si ma première ligne regroupe 1000 lignes dans ma table 1 alors je vais toper ces 1000 lignes avec la valeur 1001A, etc... J'ai bien pensé à des fonction comme GROUP BY CUBE mais je suis à court d'idée... J'ai créé une boucle mais le temps de traitement est de 10heures... Avez vous des pistes ?? Merci à vous rudy FIEVET |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
La fonction DENSE_RANK() va te permettre d'obtenir cette numérotation : Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 15 ![]() |
Merci à toi tedo01.
Sais tu si nativement, je peux faire commencer la numérotation par un autre chiffre qui serait stocké quelque part ??? |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Re-bonjour,
Pour faire commencer à 12 : Code :
|
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 15 ![]() |
Encore un grand merci à toi !!!!!
![]() ![]()
|
|
|
00
|
|
|
#6 | ||||
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 15 ![]() |
Re bonjour,
Ta solution fonctionne parfaitement mais le temps de traitement est trés long. Environ 2 heures pour 2.5 millions de lignes. Le traitement est décomposé en deux phases : - Une vue qui va faire le critère de regroupement - Un update dans une table pour conserver la piste d'audit Voilà le code de la vue initiale 1. VUE Code :
2. UPDATE Code :
Pourrais je optimiser ma requête? je m'y prends mal ? |
||||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonsoir,
Le problème, c'est que pour l'update, Oracle parcourt le select de la vue pour chaque ligne de la table... Pour gagner du temps, il faudrait
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 15 ![]() |
Je savais pas que oracle devait balayer toute la table avant l'update.
Par contre je ne peux pas vraiment toucher à la table JACMOVP_INTSAGE Mais je peux créer une table temporaire avec le RankDense() pour après faire l'update Tu penses que cela peut accélérer les choses ? |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Les performances dépendent de beaucoup de critères, je pense que le mieux c'est d'essayer :-) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com