Tout d'abord, cela n'a rien à voir avec les CTE. Ce comportement serait le même avec un simple select * from table
requête. La différence est qu'avec T-SQL, la requête va dans un curseur implicite qui est renvoyé à l'appelant. Lors de l'exécution du SP à partir de Management Studio, cela est pratique. Le jeu de résultats apparaît dans la fenêtre de données comme si nous avions exécuté directement la requête. Mais c'est en fait un comportement non standard. Oracle a le comportement le plus standard qui pourrait être défini comme "le jeu de résultats de toute requête qui n'est pas dirigée vers un curseur doit être dirigé vers des variables". Lorsqu'elle est dirigée vers des variables, la requête ne doit renvoyer qu'une seule ligne.
Pour dupliquer le comportement de T-SQL, il suffit de déclarer et de renvoyer explicitement le curseur. Ensuite, le code appelant extrait du curseur l'intégralité du jeu de résultats, mais une ligne à la fois. Vous n'obtenez pas la commodité d'un développeur SQL ou d'un développeur PL/SQL qui détourne le jeu de résultats vers la fenêtre d'affichage des données, mais vous ne pouvez pas tout avoir.
Cependant, comme nous n'écrivons généralement pas de SP uniquement pour être appelés depuis l'IDE, il est plus facile de travailler avec les curseurs explicites d'Oracle qu'avec ceux implicites de SQL Server. Il suffit de google "oracle return ref curseur to caller" pour obtenir beaucoup de bon matériel.