sql >> Databáze >  >> RDS >> Oracle

ORACLE:Použití CTE (Common Table Expressions) s PL/SQL

Za prvé, toto nemá nic společného s CTE. Toto chování by bylo stejné s jednoduchým select * from table dotaz. Rozdíl je v tom, že u T-SQL jde dotaz do implicitního kurzoru, který je vrácen volajícímu. Při spouštění SP z Management Studio je to praktické. Sada výsledků se zobrazí v datovém okně, jako bychom dotaz provedli přímo. Ale to je vlastně nestandardní chování. Oracle má standardnější chování, které by mohlo být uvedeno jako "výsledková sada jakéhokoli dotazu, který není směrován do kurzoru, musí být směrován na proměnné." Při přesměrování do proměnných musí dotaz vrátit pouze jeden řádek.

Chcete-li duplikovat chování T-SQL, stačí explicitně deklarovat a vrátit kurzor. Potom volající kód načte z kurzoru celou sadu výsledků, ale jeden řádek po druhém. Nezískáte pohodlí Sql Developer nebo PL/SQL Developer přesměrování sady výsledků do okna zobrazení dat, ale nemůžete mít vše.

Protože však obvykle nepíšeme SP jen proto, abychom byli voláni z IDE, je jednodušší pracovat s explicitními kurzory Oracle než s implicitními kurzory SQL Serveru. Stačí zadat do googlu „oracle return ref ref cursor to caller“ a získáte spoustu dobrých materiálů.



  1. jak předřadit řetězec před sekvencí generovanou postgresql?

  2. Zobrazit všechna omezení cizích klíčů pro celou databázi MySQL

  3. postgres:Co vlastně dělá dotaz 'select * from user'?

  4. SQL Řaďte ​​podle řetězce, čísla se zobrazují jako poslední