Po pierwsze, nie ma to nic wspólnego z CTE. To zachowanie byłoby takie samo w przypadku prostego select * from table
zapytanie. Różnica polega na tym, że w T-SQL zapytanie przechodzi do niejawnego kursora, który jest zwracany do wywołującego. Przy wykonywaniu SP z Management Studio jest to wygodne. Zestaw wyników pojawia się w oknie danych, tak jakbyśmy bezpośrednio wykonali zapytanie. Ale to w rzeczywistości niestandardowe zachowanie. Oracle ma bardziej standardowe zachowanie, które można określić jako „zestaw wyników każdego zapytania, które nie jest skierowane do kursora, musi być skierowany do zmiennych”. Po skierowaniu do zmiennych zapytanie musi zwrócić tylko jeden wiersz.
Aby zduplikować zachowanie T-SQL, wystarczy jawnie zadeklarować i zwrócić kursor. Następnie kod wywołujący pobiera z kursora cały zestaw wyników, ale po jednym wierszu na raz. Nie masz wygody, jaką daje programista Sql lub programista PL/SQL, który przekierowuje zestaw wyników do okna wyświetlania danych, ale nie możesz mieć wszystkiego.
Jednakże, ponieważ generalnie nie piszemy SP tylko po to, by były wywoływane z IDE, łatwiej jest pracować z jawnymi kursorami Oracle niż niejawnymi SQL Server. Po prostu wpisz w Google „Oracle return ref cursor to caller”, aby uzyskać dużo dobrego materiału.