Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORACLE:Verwendung von CTEs (Common Table Expressions) mit PL/SQL

Erstens hat dies nichts mit CTEs zu tun. Dieses Verhalten wäre das gleiche mit einem einfachen select * from table Anfrage. Der Unterschied besteht darin, dass bei T-SQL die Abfrage in einen impliziten Cursor geht, der an den Aufrufer zurückgegeben wird. Beim Ausführen des SP aus Management Studio ist dies praktisch. Die Ergebnismenge erscheint im Datenfenster, als ob wir die Abfrage direkt ausgeführt hätten. Aber das ist eigentlich ein nicht standardmäßiges Verhalten. Oracle hat das eher standardmäßige Verhalten, das wie folgt ausgedrückt werden könnte:"Die Ergebnismenge jeder Abfrage, die nicht an einen Cursor gerichtet ist, muss an Variablen gerichtet werden." Wenn sie in Variablen geleitet wird, muss die Abfrage nur eine Zeile zurückgeben.

Um das Verhalten von T-SQL zu duplizieren, müssen Sie nur den Cursor explizit deklarieren und zurückgeben. Dann ruft der aufrufende Code vom Cursor die gesamte Ergebnismenge ab, außer jeweils eine Zeile. Sie haben nicht den Komfort von Sql Developer oder PL/SQL Developer, die Ergebnismenge in das Datenanzeigefenster umzuleiten, aber Sie können nicht alles haben.

Da wir jedoch im Allgemeinen keine SPs schreiben, die nur von der IDE aufgerufen werden, ist es einfacher, mit den expliziten Cursorn von Oracle zu arbeiten als mit den impliziten von SQL Server. Googeln Sie einfach "Oracle Return ref Cursor to Caller", um eine ganze Menge gutes Material zu erhalten.