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;