4.6.1 CALL文の形式と規則
(1) 機能
手続きを呼び出します。
(2) 使用権限
- DBA権限又はCONNECT権限を持つユーザ
-
手続きを呼び出せます。ただし,手続き中の各SQL文が実行されるときに,それぞれのSQLの実行権限が必要です。
(3) 形式
CALL 〔認可識別子.〕ルーチン識別子 (〔引数〔,引数〕…〕) 引数::={{IN|OUT|INOUT} :埋込み変数〔:標識変数〕 |〔{IN|OUT|INOUT}〕 {SQL変数|SQLパラメタ|?パラメタ} |〔IN〕 値式}
(4) オペランド
(a) 〔認可識別子.〕ルーチン識別子
- 認可識別子
-
呼び出す手続きの所有者の認可識別子を指定します。
パブリック手続きを呼び出す場合は,認可識別子にPUBLICを指定します。
- ルーチン識別子
-
呼び出す手続きのルーチンの名前を指定します。
(b) 引数
::={{IN|OUT|INOUT} :埋込み変数〔:標識変数〕 |〔{IN|OUT|INOUT}〕 {SQL変数|SQLパラメタ|?パラメタ} |〔IN〕 値式}
呼び出す手続きのパラメタに対する引数を指定します。IN,OUT,又はINOUTは,CREATE PROCEDUREで指定した手続きのパラメタの入出力モード(パラメタモード)を指定します。
IN,OUT,及びINOUTの指定規則を次の表に示します。
指定する引数の種別 |
CALL文の種別 |
||
---|---|---|---|
動的実行 |
UAP埋込み |
ルーチン定義中 |
|
:埋込み変数〔:標識変数〕 |
× |
○※2 |
× |
SQL変数,SQLパラメタ |
× |
× |
○※1 |
SQL変数,SQLパラメタを基にしたコンポネント指定 |
× |
× |
○※1 |
?パラメタ |
○※1 |
× |
× |
上記以外の値式 |
○※3 |
○※3 |
○※3 |
- (凡例)
-
○:指定できます。
×:指定できません。
- 注※1
-
IN,OUT,又はINOUTを指定できます。また,省略もできます。
- 注※2
-
IN,OUT,又はINOUTを必ず指定します。
- 注※3
-
INを指定できます。また,省略もできます。
(5) 共通規則
-
引数は,指定した順序でパラメタと対応します。
-
引数のデータ型は,対応するパラメタのデータ型と互換性がなければなりません。
-
対応するパラメタのパラメタモードがOUT,又はINOUTの場合で,そのパラメタ値としてNULL値が出力される場合,受け取る引数には標識変数が必要です。
-
パラメタモードがIN,OUT,又はINOUTのパラメタに対する引数として指定した?パラメタは,それぞれ入力?パラメタ,出力?パラメタ,又は入力?パラメタかつ出力?パラメタになります。
値式中の?パラメタは,入力?パラメタになります。
-
入力パラメタ,及び出力パラメタには,BOOLEAN型を指定できません。
-
埋込み変数(標識変数),?パラメタは単純構造にしてください。
-
パラメタモードがINの引数に,次の指定は記述できません。
-
集合関数を含む値式
-
ウィンドウ関数を含む値式
-
列指定を含む値式
-
抽象データ型列の属性を示したコンポネント指定を含む値式
-
-
パラメタモードがOUT又はINOUTの引数に,抽象データ型列の属性を示したコンポネント指定は記述できません。
-
引数には,結果のデータ型がBLOB,又は最大長が32,001バイト以上のBINARYとなるスカラ関数SUBSTRを,単独の値式として指定できません。
-
引数に指定する値式中に,副問合せは指定できません。
-
手続き定義でDYNAMIC RESULT SETS句に1以上を指定した手続きを呼び出した場合,手続きから次の表に示す結果集合の組が返却されます。ただし,次の表に示す結果集合がDYNAMIC RESULT SETS句に指定した数より多い場合は,DYNAMIC RESULT SETS句に指定した数までの結果集合だけが返却されます。
表4‒4 手続きから返却される結果集合とその順序 手続きの種類
返却される結果集合
返却順序
Java手続き
手続き定義の外部ルーチン指定で指定したJavaメソッドのjava.sql.ResultSet[]型のパラメタに設定した結果集合
パラメタ指定順序
SQL手続き
手続き中で宣言された結果集合カーソルのうち,手続き終了時に開いた状態であるカーソルの結果集合
カーソルをオープンした順序
-
呼び出した手続きが結果集合を返却した場合は,次のリターンコードが設定されます。
-
SQL連絡領域のSQLCODE領域に120
-
SQLCODE変数に120
-
SQLSTATE変数に'0100C'
ただし,手続き終了時に開いた状態である結果集合カーソルの数が手続き定義のDYNAMIC RESULT SETS句に指定した数より多い場合は,SQLSTATE変数には'0100E'が設定されます。
-
(6) 留意事項
-
インデクスの追加又は削除によって,手続きのSQLオブジェクト中のインデクス情報が無効になった場合は手続きを実行できなくなるため,手続きのSQLオブジェクトを再作成する必要があります。
-
PURGE TABLE文,COMMIT文,及びROLLBACK文を使用した手続きは,次の環境では実行できません。
-
OLTP下のUAPから手続きを呼び出す場合
-
-
認可識別子を省略した場合の仮定値については,「スキーマパス」を参照してください。