|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
Bonjour à tous,
J'aurais besoin de vos lumières pour une requête SQL. Voici l'énoncé : Je souhaiterai, via une requête SQL et un Connect by (arbre) récupérer seulement les branches dont il existe au moins 2 niveaux (level 1 et level 2) ? çà vous semble clair ? Et si oui, savez-vous comment faire ? Code :
Cordialement Boutss |
||
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
La version de ma base est 9i.
Et c'est peut-être çà mon problème car la version 10 offre les possibilités suivantes : - NOCYCLE - CONNECT_BY_ISCYCLE Le pseudocolumn de CONNECT_BY_ISCYCLE renvoie 1 si la rangée courante a un enfant qui est également son ancêtre. Autrement il renvoie 0 |
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Un solution mais qui est très couteuse serait une sous requête avec LEVEL > 1
|
|
|
00
|
|
|
#4 | ||
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
Comme ceci ?
Code :
Mais j'ai bien l'impression que l'on ne peut pas faire de sous-requête avec un Connect by |
||
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
ha oui... je ne connaissais pas cette limitation
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
Une piste que j'essaie d'étudier est "SYS_CONNECT_BY_PATH(column, char)"
Qui permet de ramener l'ensemble de la branche pour une colonne donnée et un séparateur. Sinon, à part LEVEL, il n'y a pas l'air d'avoir d'autres fonctionnalités... elles apparaissent, comme je le disais, dans la 10g. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() |
Un exemple existe dans la FAQ : Comment construire une requête récursive ?
SYS_CONNECT_BY_PATH ramène la "concaténation" de l'arborescence, donc tu peux peut-être faire un traitement sur cette chaîne pour récupérer la profondeur en comptant le nombre de séparateur ?
__________________
"Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément." Nicolas Boileau "Expliquer empêche de comprendre si cela dispense de chercher" Quiz Oracle : venez tester vos connaissances ! |
|
|
00
|
|
|
#8 | ||
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
Oui, Merci Xo, c'est ce que je comptais faire, travailler le SYS_CONNECT_BY_PATH.
Fred_D, en fait tu avais raison une sous-requête fait l'affaire mais pas dans la clause du Connect By... mais celle du START WITH Voilà le résultat qui fonctionne : Code :
J'ai supprimé la clause where et tout mis dans la clause du START WITH (plus logique en plus) |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com