Revideret svar
Hvis du ikke kalder denne kode fra et andet program, er en mulighed at springe PL/SQL over og gøre det strengt i SQL ved hjælp af bindevariabler:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
I mange værktøjer (såsom Toad og SQL Developer), udelades var
og exec
sætninger vil få programmet til at bede dig om værdien.
Originalt svar
En stor forskel mellem T-SQL og PL/SQL er, at Oracle ikke lader dig implicit returnere resultatet af en forespørgsel. Resultatet skal altid udtrykkeligt returneres på en eller anden måde. Den enkleste måde er at bruge DBMS_OUTPUT
(svarende omtrent til print
) for at udlæse variablen:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Dette er dog ikke særlig nyttigt, hvis du forsøger at returnere et resultatsæt. I så fald vil du enten returnere en samling eller en refcursor. Brug af en af disse løsninger vil dog kræve, at du pakker din kode ind i en funktion eller procedure og kører funktionen/proceduren fra noget, der er i stand til at forbruge resultaterne. En funktion, der fungerede på denne måde, kan se sådan ud:
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;