CALL文はOracleのストアドファンクションやストアドプロシージャを呼び出すためのSQL文です。ファンクションの戻り値を取得することもできます。この記事では、CALL文の使い方をご紹介します。
プロシージャを実行する。
CALL [schema.][package.]name[@dblink]([arg ...])
ファンクションを実行する。
CALL [schema.][package.]name[@dblink]([arg ...]) INTO :var
実行するプロシージャ、ファンクション又はパッケージを含むスキーマを指定する。実行するプロシージャ、ファンクション又はパッケージが自分のスキーマにある場合は、スキーマの指定を省略できる。
プロシージャ又はファンクションが含まれるパッケージを指定する。パッケージに含まれないスタンドアロンパッケージ又はスタンドアロンファンクションを実行する場合は、パッケージは指定しない。
実行するプロシージャ又はファンクションを指定する。
実行するプロシージャ、ファンクション又はパッケージが存在するデータベースを指し示すデータベースリンクを指定する。
実行するプロシージャ又はファンクションの引数を指定する。
ファンクションの戻り値を格納するホスト変数を指定する。
プロシージャを実行する例を示す。
CALL example_package.example_procedure()
引数のデフォルト値が定義されていれば、その引数を省略してプロシージャを実行できる。
CREATE OR REPLACE PROCEDURE proc1 (
param1 IN VARCHAR2,
param2 IN VARCHAR2 DEFAULT 'default arg.'
) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(param1);
DBMS_OUTPUT.PUT_LINE(param2);
END;
SQL> SET SERVEROUTPUT ON
SQL> CALL proc1('first arg.', 'second arg.');
first arg.
second arg.
コールが完了しました。
SQL> CALL proc1('first arg.');
first arg.
default arg.
コールが完了しました。
SQL>
出力パラメータがあるプロシージャ又はファンクションをSQL*Plusから実行する場合は、 SQL*PlusコマンドのVARIABLEでバインド変数を宣言して、 プロシージャ又はファンクションの出力パラメータに指定する。 プロシージャを実行した後には、SQL*PlusコマンドのPRINTで変数の値を表示できる。
SQL> VARIABLE param NUMBER
SQL> CALL example_procedure(:param);
コールが完了しました。
SQL> PRINT param
PARAM
----------
0
SQL>