Bonjour,
J'ai un souci de design. Je vous expose le problème ainsi que les différentes solutions envisagées.
Le problème
Je possède une arborescence (table ARBO) d'environ 1 millions d'éléments. L'utilisateur peut sélectionner 0,1 ou plusieurs éléments dans cette arborescence (noeuds ou feuilles).
Plus tard, il peut extraire des données (contenues dans une table DATA).
Il peut notamment extraire des données sur l'ensemble des feuilles des noeuds sélectionnés (donc potentiellement la moitié des éléments de l'arbre...)
Solution 1
Cette solution fonctionne mais répond en 1 minute, ce qui est inacceptable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM DATA WHERE ID IN (SELECT ID_ELEMENT FROM ARBO START WITH ... CONNECT BY PRIOR ...)
Solution 2
Lorsque l'utilisateur a effectué sa sélection, conserver l'ensemble des feuilles de la sélection dans un CLOB et réexploiter ce CLOB plus tard sur la table DATA (SELECT * FROM WHERE ID IN "le CLOB") quand l'utilisateur demandera des données.
En pratique, je ne sais pas trop comment rentrer proprement le résultat d'un SELECT dans CLOB et puis quelque chose me dit que cette solution est hideuse.
Solution 3
Utiliser une table temporaire, mais j'ai l'impression que je vais devoir créer une table temporaire par utilisateur (dynamiquement?).
Avez-vous une solution plus élégante?
Merci d'avance
Partager