sql >> Base de Datos >  >> RDS >> Oracle

ORACLE:uso de CTE (expresiones de tabla comunes) con PL/SQL

En primer lugar, esto no tiene nada que ver con los CTE. Este comportamiento sería el mismo con un simple select * from table consulta. La diferencia es que con T-SQL, la consulta va a un cursor implícito que se devuelve a la persona que llama. Cuando se ejecuta el SP desde Management Studio, esto es conveniente. El conjunto de resultados aparece en la ventana de datos como si hubiéramos ejecutado la consulta directamente. Pero esto es en realidad un comportamiento no estándar. Oracle tiene un comportamiento más estándar que podría establecerse como "el conjunto de resultados de cualquier consulta que no se dirija a un cursor se debe dirigir a las variables". Cuando se dirige a variables, la consulta debe devolver solo una fila.

Para duplicar el comportamiento de T-SQL, solo tiene que declarar explícitamente y devolver el cursor. Luego, el código de llamada obtiene del cursor el conjunto de resultados completo, pero una fila a la vez. No obtiene la conveniencia de Sql Developer o PL/SQL Developer desviando el conjunto de resultados a la ventana de visualización de datos, pero no puede tener todo.

Sin embargo, como generalmente no escribimos SP solo para llamarlos desde el IDE, es más fácil trabajar con los cursores explícitos de Oracle que con los implícitos de SQL Server. Simplemente busque en Google "Oracle return ref cursor to caller" para obtener un montón de buen material.