CALL コマンドおよび EXEC[UTE [PROCEDURE]] コマンド

ホスト上でストアド プロシージャを呼び出すには、CALL コマンド、EXEC コマンド、EXECUTE コマンド、または EXECUTE PROCEDURE コマンドを使用します。

CALL、EXEC、EXECUTE、EXECUTE PROCEDURE の各コマンドの動作、入力、および出力は同じです。 さまざまなコマンドがあるのは、他の手続き言語の実行方法との互換性を得るためです。 また、SELECT コマンドを使用してストアード・プロシージャーを実行することもできます。

概要

CALL procedure_name(arguments)
EXEC procedure_name(arguments)
EXECUTE procedure_name(arguments)
EXECUTE PROCEDURE procedure_name(arguments)
SELECT procedure_name(arguments)

入力

CALL コマンドおよび EXEC[UTE [PROCEDURE] コマンドの入力は以下のとおりです。
表 1. CALL および EXEC[UTE [PROCEDURE]] の入力
入力 説明
procedure_name 起動するストアード・プロシージャーの名前です。 プロシージャー名のみを指定した場合、 システムは現在のデータベースとスキーマを検索してから PATH を検索し、プロシージャーを見つけます。

完全修飾オブジェクト名を指定して、別のデータベースまたはスキーマで定義されているプロシージャーを実行することができます。

引数 プロシージャーに対する定数またはリテラル引数のリストを指定します。 引数として関数の結果を指定することもできます (その関数も定数またはリテラル引数のみを取る場合)。

出力

CALL コマンドおよび EXEC[UTE [PROCEDURE] コマンドの出力は以下のとおりです。

表 2. CALL および EXEC[UTE [PROCEDURE]] の出力
出力 説明
ERROR: EXECUTE PROC: Permission denied. このエラーは、現在のユーザー・アカウントがストアード・プロシージャーに対する Execute 権限を持たないことを示します。
ERROR:関数'NAME(ARGS)' が存在しません

Unable to identify a function that satisfies the argument types

You might need to add explicit typecasts

このメッセージは、ユーザーがストアード・プロシージャーに対して間違った引数を入力したことを示します。 その名前のプロシージャーは存在しますが、必要な入力引数が異なります。

説明

必要な特権
ストアード・プロシージャーを実行するには、以下の基準のいずれか 1 つを満たす必要があります。
  • PROCEDURE オブジェクトに対する Execute 特権を持つ必要があります。
  • その特定のプロシージャーに対する Execute 特権を持つ必要があります。
  • そのプロシージャーの所有者でなければなりません。
  • データベース admin ユーザーであるか、現在のデータベースの所有者であるか、または複数のスキーマをサポートする 1 つのシステム上の現在のスキーマの所有者でなければなりません。

使用法

以下に使用例を示します。
MYDB.MYSCH(USER)=> CALL updateacct();
MYDB.MYSCH(USER)=> EXEC schema_two.myproc();
MYDB.MYSCH(USER)=> EXECUTE sales.dev.inventorysearch(umbrellas);
MYDB.MYSCH(USER)=> EXECUTE PROCEDURE updateacct();
SELECT コマンドを使用してプロシージャーを実行することもできますが、FROM 節を指定することはできません。 例:
MYDB.MYSCH(USER)=> SELECT updateacct();
MYDB.MYSCH(USER)=> SELECT inventorysearch(umbrellas);