Reviderat svar
Om du inte anropar den här koden från ett annat program är ett alternativ att hoppa över PL/SQL och göra det strikt i SQL med bindningsvariabler:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
I många verktyg (som Toad och SQL Developer), utelämna var
och exec
satser kommer att få programmet att fråga dig om värdet.
Originalt svar
En stor skillnad mellan T-SQL och PL/SQL är att Oracle inte låter dig implicit returnera resultatet av en fråga. Resultatet måste alltid uttryckligen returneras på något sätt. Det enklaste sättet är att använda DBMS_OUTPUT
(ungefär motsvarande print
) för att mata ut variabeln:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Detta är dock inte särskilt användbart om du försöker returnera en resultatuppsättning. I så fall vill du antingen returnera en samling eller en refkursor. Men att använda någon av dessa lösningar skulle kräva att du packar in din kod i en funktion eller procedur och kör funktionen/proceduren från något som kan konsumera resultaten. En funktion som fungerade på detta sätt kan se ut ungefär så här:
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;