Oracle
 sql >> Database >  >> RDS >> Oracle

ORACLE:utilizzo di CTE (Common Table Expressions) con PL/SQL

Innanzitutto, questo non ha nulla a che fare con i CTE. Questo comportamento sarebbe lo stesso con un semplice select * from table interrogazione. La differenza è che con T-SQL, la query va in un cursore implicito che viene restituito al chiamante. Quando si esegue SP da Management Studio, questo è conveniente. Il set di risultati appare nella finestra dei dati come se avessimo eseguito direttamente la query. Ma questo è in realtà un comportamento non standard. Oracle ha il comportamento più standard che potrebbe essere affermato come "l'insieme di risultati di qualsiasi query che non è indirizzata a un cursore deve essere indirizzato a variabili". Quando indirizzata in variabili, la query deve restituire solo una riga.

Per duplicare il comportamento di T-SQL, devi solo dichiarare esplicitamente e restituire il cursore. Quindi il codice chiamante recupera dal cursore l'intero set di risultati ma una riga alla volta. Non hai la comodità di Sql Developer o PL/SQL Developer deviando il set di risultati nella finestra di visualizzazione dei dati, ma non puoi avere tutto.

Tuttavia, poiché in genere non scriviamo SP solo per essere chiamati dall'IDE, è più facile lavorare con i cursori espliciti di Oracle rispetto a quelli impliciti di SQL Server. Basta cercare su Google "oracle restituisce il cursore di riferimento al chiamante" per ottenere un sacco di buon materiale.