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] コマンドの入力は以下のとおりです。
入力 | 説明 |
---|---|
procedure_name | 起動するストアード・プロシージャーの名前です。 プロシージャー名のみを指定した場合、
システムは現在のデータベースとスキーマを検索してから PATH を検索し、プロシージャーを見つけます。 完全修飾オブジェクト名を指定して、別のデータベースまたはスキーマで定義されているプロシージャーを実行することができます。 |
引数 | プロシージャーに対する定数またはリテラル引数のリストを指定します。 引数として関数の結果を指定することもできます (その関数も定数またはリテラル引数のみを取る場合)。 |
出力
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);