改訂された回答
別のプログラムからこのコードを呼び出さない場合は、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;