Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie deklariere und verwende ich Variablen in PL/SQL wie in T-SQL?

Ü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;