2011-04-23 5 views
1

J'essaie d'écrire une fonction récursive de type PL/SQL.Création d'un enregistrement en PL/SQL

Le problème est:

Donc, dire le tableau A a des lignes:

{B, C}, 
{C, D}, 
{C, F}, 
{D, E}, 
{E, F} 

retour tout ce que B dépend, directement et indirectement.

Le tuple {B, C} implique que B dépend de C, C dépend de D et ainsi de suite. Cette fonction, lorsqu'elle reçoit B, renverrait un curseur ou quelque chose qui donnerait: {C, D, F, E} Notez que les simples boucles et les valeurs d'impression peuvent donner des résultats en double (dans ce cas, E). Je suis plutôt nouveau à PL/SQL et je ne peux pas vraiment penser à un moyen de le faire.

Merci d'avance pour toute aide!

Répondre

4

En supposant que la table ressemble à ceci:

ID PARENT_ID 
--- --------- 
B  C 
C  D 
C  F 
D  E 
E  F 

Pourquoi ne pas utiliser une requête hiérarchique comme:

select distinct parent_id 
    from (select parent_id 
      from my_table 
     start with ID = 'B' 
       connect by nocycle id = prior parent_id 
     ) 
order by parent_id 

non testé de cette SQL, mais il devrait être un point dans la bonne direction ; votre fonction pourrait renvoyer ce curseur si c'est ce dont vous aviez besoin, ou un tableau de valeurs sinon.

+0

Je n'ai pas encore essayé. Cependant, je commence à penser à faire un programme d'emballage en Java pour faire cela pour moi à la place ... –

+0

Java? Soupir, une hiérarchie de dépendances est ce qui est nécessaire ... +1 – tbone

+0

Essayé et fonctionne! Merci, Adam! :) –