Upravená odpověď
Pokud tento kód nevoláte z jiného programu, možností je přeskočit PL/SQL a provést to výhradně v SQL pomocí proměnných vazeb:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
V mnoha nástrojích (jako je Toad a SQL Developer) vynechání var
a exec
příkazy způsobí, že vás program vyzve k zadání hodnoty.
Původní odpověď
Velký rozdíl mezi T-SQL a PL/SQL je v tom, že Oracle vám nedovolí implicitně vrátit výsledek dotazu. Výsledek se vždy musí nějakým způsobem explicitně vrátit. Nejjednodušší způsob je použít DBMS_OUTPUT
(přibližně ekvivalentní print
) pro výstup proměnné:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
To však není příliš užitečné, pokud se pokoušíte vrátit sadu výsledků. V takovém případě budete chtít vrátit kolekci nebo rekurzor. Použití kteréhokoli z těchto řešení by však vyžadovalo zabalení kódu do funkce nebo procedury a spuštění funkce/procedury z něčeho, co je schopné spotřebovat výsledky. Funkce, která fungovala tímto způsobem, může vypadat nějak takto:
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;