För det första har detta ingenting med CTE att göra. Detta beteende skulle vara detsamma med en enkel select * from table
fråga. Skillnaden är att med T-SQL går frågan in i en implicit markör som returneras till den som ringer. När du kör SP från Management Studio är detta bekvämt. Resultatuppsättningen visas i datafönstret som om vi hade utfört frågan direkt. Men detta är faktiskt icke-standardiserat beteende. Oracle har det mer standardbeteende som kan anges som "resultatuppsättningen av en fråga som inte är riktad till en markör måste riktas till variabler." När den riktas till variabler måste frågan endast returnera en rad.
För att duplicera beteendet hos T-SQL behöver du bara explicit deklarera och returnera markören. Sedan hämtar anropskoden hela resultatuppsättningen från markören men en rad i taget. Du får inte bekvämligheten med att SQL Developer eller PL/SQL Developer omdirigerar resultatuppsättningen till datavisningsfönstret, men du kan inte ha allt.
Men eftersom vi vanligtvis inte skriver SPs bara för att bli anropade från IDE, är det lättare att arbeta med Oracles explicita markörer än SQL Servers implicita. Googla bara på "oracle return ref cursor to caller" för att få en massa bra material.