2010-09-02 4 views
-4

Chaque ligne d'un curseur doit être jointe à une autre table et le résultat entier doit être renvoyé par un curseurCurseurs complexes pour renvoyer plusieurs lignes

Dire cursor1 return 5 rows. Chacune de ces 5 lignes doit être jointe à table1. et le résultat final pour toutes les 5 lignes doit être retourné une ligne.

Plz aider

+0

Donc, vous voulez que les cinq lignes de cursor1 soient jointes aux lignes appropriées de table1, alors vous voulez que les lignes résultant de la jointure concaténées ensemble dans une seule rangée géante? Est-ce exact? –

+2

Ce n'est vraiment pas clair ce que vous demandez. Quelques exemples de données d'entrée et de sortie attendues seraient vraiment utiles. Il ne doit pas être l'ensemble de données complet, un test simple utilisant EMP et DEPT le ferait. – APC

+0

Si vous changez le mot "cursor" pour resultset, cela devient plus simple. C'est juste une jointure, et une vue en ligne ferait probablement. Que diriez-vous de poster le code (ou une version dépouillée de celui-ci, au moins) –

Répondre

1

Il est assez difficile de combiner les enregistrements récupérés à partir d'un curseur de référence avec le jeu de résultats d'une autre requête. Une meilleure idée serait d'ouvrir juste le curseur ref avec un SELECT qui rejoint toutes les tables pertinentes.

+0

Colonnes dans le curseur après joing 5 tables employeeID, employeename, nativeplace, permanentplace, présentplace, etc ...... Tableau B: employeeid, employeename , place, téléphone, zip, rue, etc ... Enfin, nous devrions retourner un curseur, après avoir joint le résultat du curseur et le résultat de la table B basé sur empid et empname. Est-il possible de retourner un curseur? Aide de Plz –

0

La question est pas claire, mais il semble que ce dont vous avez besoin est quelque chose comme ça

a) Définir un type d'objet à la forme de votre ligne de résultat b) Définir une collection de ce type d'objet c) Créez une fonction avec un type de retour du type collection - cela pourrait prendre en paramètre le curseur A (SYS_REFCURSOR), joindre chaque ligne du curseur A à la table B, puis utiliser PIPE ROW pour chaque ligne de résultat. d) Si le résultat final est nécessaire comme curseur, puis une autre fonction le long des lignes de

FUNCTION complex_query(in_cursor SYS_REFCURSOR) 
RETURN SYS_REFCURSOR 
IS 
    lreturn SYS_REFCURSOR; 
BEGIN 
    OPEN lreturn FOR 
     (SELECT * FROM TABLE(convert_to_collection(in_cursor))); 
    RETURN lreturn; 
END; 

Alternativement, vous pouvez simplement la commande SELECT * FROM TABLE (convert_to_collection (in_cursor)) directement.

Ce que je ne comprends pas est l'exigence que tout soit retourné comme 1 rangée.

Questions connexes