Poprawiona odpowiedź
Jeśli nie wywołujesz tego kodu z innego programu, opcją jest pominięcie PL/SQL i zrobienie tego ściśle w SQL przy użyciu zmiennych wiązania:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
W wielu narzędziach (takich jak Toad i SQL Developer) pomijanie var
i exec
instrukcje spowodują, że program poprosi o podanie wartości.
Oryginalna odpowiedź
Duża różnica między T-SQL i PL/SQL polega na tym, że Oracle nie pozwala niejawnie zwracać wyniku zapytania. Wynik zawsze musi być w jakiś sposób wyraźnie zwrócony. Najprostszym sposobem jest użycie DBMS_OUTPUT
(w przybliżeniu odpowiednik print
), aby wyprowadzić zmienną:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Nie jest to jednak zbyt pomocne, jeśli próbujesz zwrócić zestaw wyników. W takim przypadku będziesz chciał zwrócić kolekcję lub refcursor. Jednak użycie jednego z tych rozwiązań wymagałoby zapakowania kodu w funkcję lub procedurę i uruchomienie funkcji/procedury z czegoś, co może zużywać wyniki. Funkcja, która działała w ten sposób, może wyglądać mniej więcej tak:
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;