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.
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? –
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
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) –