Ревизиран отговор
Ако не извиквате този код от друга програма, опция е да пропуснете PL/SQL и да го направите стриктно в SQL, като използвате променливи за свързване:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
В много инструменти (като Toad и SQL Developer), пропускането на var
и exec
операторите ще накарат програмата да ви подкани за стойността.
Оригинален отговор
Голяма разлика между T-SQL и PL/SQL е, че Oracle не ви позволява имплицитно да върнете резултата от заявка. Резултатът винаги трябва да бъде изрично върнат по някакъв начин. Най-простият начин е да използвате DBMS_OUTPUT
(приблизително еквивалентно на print
), за да изведете променливата:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Това обаче не е особено полезно, ако се опитвате да върнете набор от резултати. В този случай или ще искате да върнете колекция, или рекурсор. Въпреки това, използването на някое от тези решения ще изисква обвиване на вашия код във функция или процедура и стартиране на функцията/процедурата от нещо, което е в състояние да консумира резултатите. Функция, която работи по този начин, може да изглежда така:
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;