Überarbeitete Antwort
Wenn Sie diesen Code nicht von einem anderen Programm aus aufrufen, besteht die Möglichkeit, PL/SQL zu überspringen und dies ausschließlich in SQL mit Bind-Variablen zu tun:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
In vielen Tools (wie Toad und SQL Developer) wird die var
weggelassen und exec
Anweisungen veranlassen das Programm, Sie nach dem Wert zu fragen.
Originalantwort
Ein großer Unterschied zwischen T-SQL und PL/SQL besteht darin, dass Oracle Sie das Ergebnis einer Abfrage nicht implizit zurückgeben lässt. Das Ergebnis muss immer auf irgendeine Weise explizit zurückgegeben werden. Der einfachste Weg ist die Verwendung von DBMS_OUTPUT
(entspricht ungefähr print
), um die Variable auszugeben:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Dies ist jedoch nicht sehr hilfreich, wenn Sie versuchen, eine Ergebnismenge zurückzugeben. In diesem Fall möchten Sie entweder eine Sammlung oder einen Refcursor zurückgeben. Wenn Sie jedoch eine dieser Lösungen verwenden, müssen Sie Ihren Code in eine Funktion oder Prozedur einschließen und die Funktion/Prozedur von etwas ausführen, das die Ergebnisse verarbeiten kann. Eine Funktion, die auf diese Weise funktioniert, könnte etwa so aussehen:
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;