CALLは、ストアドプロシージャ又はストアドファンクションを実行するSQL文である。

構文

プロシージャを実行する。

CALL [schema.][package.]name[@dblink]([arg ...])

ファンクションを実行する。

CALL [schema.][package.]name[@dblink]([arg ...]) INTO :var
schema

実行するプロシージャ、ファンクション又はパッケージを含むスキーマを指定する。実行するプロシージャ、ファンクション又はパッケージが自分のスキーマにある場合は、スキーマの指定を省略できる。

package

プロシージャ又はファンクションが含まれるパッケージを指定する。パッケージに含まれないスタンドアロンパッケージ又はスタンドアロンファンクションを実行する場合は、パッケージは指定しない。

name

実行するプロシージャ又はファンクションを指定する。

dblink

実行するプロシージャ、ファンクション又はパッケージが存在するデータベースを指し示すデータベースリンクを指定する。

arg

実行するプロシージャ又はファンクションの引数を指定する。

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>
スポンサーリンク