sql >> Database >  >> RDS >> Oracle

ORACLE:CTE's (Common Table Expressions) gebruiken met PL/SQL

Ten eerste heeft dit niets te maken met CTE's. Dit gedrag zou hetzelfde zijn met een simpele select * from table vraag. Het verschil is dat bij T-SQL de query in een impliciete cursor terechtkomt die wordt teruggestuurd naar de beller. Bij het uitvoeren van de SP vanuit Management Studio is dit handig. De resultatenset verschijnt in het gegevensvenster alsof we de query rechtstreeks hebben uitgevoerd. Maar dit is eigenlijk niet-standaard gedrag. Oracle heeft het meer standaard gedrag dat zou kunnen worden gesteld als "de resultatenset van elke query die niet naar een cursor is gericht, moet naar variabelen worden geleid." Als de query naar variabelen wordt gestuurd, hoeft deze slechts één rij te retourneren.

Om het gedrag van T-SQL te dupliceren, hoeft u alleen de cursor expliciet te declareren en terug te sturen. Vervolgens haalt de aanroepende code van de cursor de hele resultatenset op, maar één rij tegelijk. U krijgt niet het gemak van Sql Developer of PL/SQL Developer die de resultatenset naar het gegevensweergavevenster leidt, maar u kunt niet alles hebben.

Omdat we echter over het algemeen geen SP's schrijven om vanuit de IDE te worden aangeroepen, is het gemakkelijker om met de expliciete cursors van Oracle te werken dan met de impliciete van SQL Server. Google gewoon op "oracle return ref cursor to caller" om heel veel goed materiaal te krijgen.



  1. PostgreSQL verandert de volgorde van geretourneerde rijen

  2. Hoe schakel ik de mysql-wachtwoordvalidatie uit?

  3. django.db.utils.ProgrammingError:relatie bot_trade bestaat niet

  4. TableView-bewerkingskolom JAVA FX