Bonjour,
je travaille sous oracle10g et j'ai dû écrire une requête assez longue et couteuse basé sur plusieurs union pour traiter un cas, un collègue m'a dis que tout ce que j'ai écris pouvais surement être simplifier en une seule requête en utilisant les fonctions analytiques, j'ai essayé mais là je peine à y arriver et me demande sérieusement si cela est possible. Voici la description de mon problème :
je gère une sorte de gestion de version de fichiers, ceux-ci sont classés par famille (type de fichier) , chaque fichier est versionné (à un instant T on génère une nouvelle version pour chaque type).
Certains type de fichiers utilisent des variantes : pour un même version je dispose de plusieurs déclinaisons ou variantes, donc à un instant T après une génération, voici la liste des fichier à jour :
Dans une application, je créée une configuration de fichier (groupe) qui doit regrouper 2 fichiers de type A et 3 de type B; donc à l'instant T voici le contenu d'une de ces configurations (certains fichiers sont déjà assigné et on peut donc voir leur nom et d'autre pas encore ont un nom de fichier null):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Fichiers_UptoDate de la vue V_LAST_VERSION_FILES : TypeFic NomFic Version Variante UseVariante -------------------------------------------------------------------------------- A Fic1 5 N B Fic2 6 1 O B Fic3 7 2 O
Dans mon application, je désire maintenant écrire une requête qui puisse me donner :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Fichiers_config1 de la vue V_CONFIG1 : TypeFic NomFic Version Variante UseVariante --------------------------------------------------------------------- A N (>fichier pas encore assigné) B O (>fichier pas encore assigné) A Fic0 0 N B Ficx 1 1 O B Ficy 1 2 O
- le numéro de version de la vue V_LAST_VERSION_FILES pour chaque fichier du même type de la vue V_CONFIG1 ne possédant pas de fichier assigné et n'utilisant pas de variante.
- null pour le numéro de version de chaque ligne de la vue V_CONFIG1 ne possédant pas de fichier assigné et utilisant une variante.
- le numéro de version de la vue V_LAST_VERSION_FILES pour chaque fichier du même type de la vue V_CONFIG1 possédant un fichier assigné et n'utilisant pas de variante.
- le numéro de version de la vue V_LAST_VERSION_FILES pour chaque fichier du même type et avec le même numéro de variante de la vue V_CONFIG1 possédant un fichier assigné et utilisant une variante.
Ma requête devrait donc me renvoyer le résultat suivant :
J'ai essayé de simplifié pour l'exemple mais les deux vues contiennent plusieurs milliers de lignes. J'ai réussis à écrire ma requête en faisant plusieurs union pour chacun des cas à traiter, mais la requête est extrêmement lente et j'aimerais savoir si le résultat peut être obtenu en une seule requête en utilisant les fonctions analityques (j'essaye mais je n'arrête pas de rencontrer des difficulutés notamment sur les jointures
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Résultat attendu : TypeFic NomFic Version Variante UseVariante VersionUpToDate ---------------------------------------------------------------------------------- A N 5 B O null A Fic0 0 N 5 B Ficx 1 1 O 6 B Ficy 1 2 O 7)...
N'hésitez pas si vous avez des questions!
Merci d'avance, Lek.
Partager