sql >> Database >  >> RDS >> Oracle

Hoe declareer en gebruik ik variabelen in PL/SQL zoals ik doe in T-SQL?

Herzien antwoord

Als je deze code niet vanuit een ander programma aanroept, is het een optie om PL/SQL over te slaan en het strikt in SQL te doen met behulp van bindvariabelen:

var myname varchar2(20);

exec :myname := 'Tom';

SELECT *
FROM   Customers
WHERE  Name = :myname;

In veel tools (zoals Toad en SQL Developer) is het weglaten van de var en exec instructies zorgen ervoor dat het programma u om de waarde vraagt.

Oorspronkelijke antwoord

Een groot verschil tussen T-SQL en PL/SQL is dat Oracle je niet impliciet het resultaat van een query laat retourneren. Het resultaat moet altijd op de een of andere manier expliciet worden geretourneerd. De eenvoudigste manier is om DBMS_OUTPUT . te gebruiken (ongeveer gelijk aan print ) om de variabele uit te voeren:

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';

     dbms_output.print_line(myname);
END;

Dit is echter niet erg handig als u een resultatenset probeert te retourneren. In dat geval wilt u ofwel een collectie of een refcursor retourneren. Als u echter een van deze oplossingen gebruikt, moet u uw code in een functie of procedure verpakken en de functie/procedure uitvoeren vanuit iets dat de resultaten kan consumeren. Een functie die op deze manier werkte, zou er ongeveer zo uit kunnen zien:

CREATE FUNCTION my_function (myname in varchar2)
     my_refcursor out sys_refcursor
BEGIN
     open my_refcursor for
     SELECT *
     FROM   Customers
     WHERE  Name = myname;

     return my_refcursor;
END my_function;


  1. Bekijk mijn presentatie 'Optimaliseren van Microsoft Access met SQL Server'

  2. 2 manieren om voorloopnullen toe te voegen in PostgreSQL

  3. Backend-prestaties verbeteren Deel 2/3:Database-indexen gebruiken

  4. Hoe een externe MySQL-verbinding in te stellen