|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Décidément, Oracle a décidé me m'ennuyer jusqu'au bout ce matin...
J'ai une table avec la structure suivante : TIE (CODSOC, TYPTIE, SIGTIE, TYPGRP, SIGGRP, ...) Souligné : Clé primaire Gras : Foreign key sur TIE (CODSOC, TYPTIE, SIGTIE) La table TIE contient donc des tiers. Ils peuvent être regroupés sous un autre tiers. Par exemple : Magasin 1 et Magasin 2 sont regroupés dans un même point de livraison, qui lui-même est regroupé dans une plateforme régionale, qui est elle-même regroupée dans une centrale d'achat nationale, qui elle-même est regroupée dans une enseigne. J'ai donc les données : Code :
Code :
J'ai déjà tenté d'intervertir l'ordre des champs dans le connect by, mais ça ne change rien... J'ai aussi tenté avec une CTE, mais j'ai pas trouvé la syntaxe pour faire une auto-jointure. |
||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Il faut préciser les PRIOR :
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Merci, ça marche impec !
|
|
|
00
|
|
|
#4 |
![]() ![]() |
Il faut aussi rajouter le codsoc dans le connect by sinon vous allez avoir des suprises.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#5 | |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
J'ai jamais compris d'ailleurs pourquoi il n'y avait pas un SOCGRP... Un groupe est forcément défini dans la même société que ses membres... Ca limite vachement la notion de référentiel supportée par le logiciel mais bon... Du coup, à partir du moment où le CODSOC est filtré, pas besoin de le spécifier dans le PRIOR. |
|
|
|
00
|
|
|
#6 | ||||||
![]() ![]() |
Le where dans les requêtes récursives s'applique après la récursion connect by.
Avec de multiples branches, la requête va partir dans tous les codsoc pour ne filtrer qu'au résultat. Pour filtrer au départ, c'est à mettre dans le START WITH. En plus, vous zappez la récursion par la PK ce qui est dommage. J'ai recréé la table avec les données que vous avez fournies, regardez les plans d'exécution, c'est très net : Code :
Code :
Code :
__________________
Email : http://scr.im/waldar |
||||||
|
10
|
|
|
#7 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Hmmm, d'accord.
La syntaxe me laissait à penser que le connect était évalué après le where. Merci pour ces informations, je ferai attention à l'avenir ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com