Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORACLE:Usando CTEs (Common Table Expressions) com PL/SQL


Primeiro, isso não tem nada a ver com CTEs. Este comportamento seria o mesmo com um simples select * from table consulta. A diferença é que com o T-SQL, a consulta entra em um cursor implícito que é retornado ao chamador. Ao executar o SP do Management Studio, isso é conveniente. O conjunto de resultados aparece na janela de dados como se tivéssemos executado a consulta diretamente. Mas este é realmente um comportamento fora do padrão. O Oracle tem o comportamento mais padrão que pode ser declarado como "o conjunto de resultados de qualquer consulta que não seja direcionada a um cursor deve ser direcionada a variáveis". Quando direcionada para variáveis, a consulta deve retornar apenas uma linha.

Para duplicar o comportamento do T-SQL, basta declarar explicitamente e retornar o cursor. Em seguida, o código de chamada busca do cursor todo o conjunto de resultados, mas uma linha por vez. Você não tem a conveniência do Sql Developer ou PL/SQL Developer desviando o conjunto de resultados para a janela de exibição de dados, mas não pode ter tudo.

No entanto, como geralmente não escrevemos SPs apenas para serem chamados do IDE, é mais fácil trabalhar com os cursores explícitos do Oracle do que com os implícitos do SQL Server. Basta pesquisar no Google "oracle return ref cursor to caller" para obter um monte de material bom.