SQL CALL文

CALL文はOracleのストアドファンクションストアドプロシージャを呼び出すためのSQL文です。ファンクションの戻り値を取得することもできます。この記事では、CALL文の使い方をご紹介します。

構文

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

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>

関連SQL

ALTER FUNCTION
ストアド・ファンクションを再コンパイルする。
ALTER PACKAGE
ストアド・パッケージを再コンパイルする。
ALTER PROCEDURE
ストアド・プロシージャを再コンパイルする。
CREATE FUNCTION
ストアド・ファンクションを作成する。
CREATE PACKAGE
ストアド・パッケージの仕様部を作成する。
CREATE PACKAGE BODY
ストアド・パッケージの本体を作成する。
CREATE PROCEDURE
ストアド・プロシージャを作成する。
DROP FUNCTION
ストアド・ファンクションを削除する。
DROP PACKAGE
ストアド・パッケージを削除する。
DROP PROCEDURE
ストアド・プロシージャを削除する。