プログラム呼び出し (CALL)

プログラム呼び出し(CALL)コマンドは,コマンドで指定されたプログラムを呼び出し,制御をそのプログラムに渡します。任意に,CALLコマンドを出したプログラムまたはユーザーは,パラメーターを呼び出し先プログラムに渡すことができます。CALLコマンドはバッチ・ジョブ,対話式ジョブ,コンパイルおよび解釈の両方の制御言語(CL)で使用することができます。呼び出されたプログラムが処理を終了すると,RETURNコマンドを使用して呼び出し側プログラムに制御を戻すことができます。

CALLコマンドをCLプログラムまたはILE CLプロシージャーで出す時に,呼び出されるプログラムに渡される各パラメーター値は,文字ストリング定数,数値定数,論理定数,浮動小数点定数,またはCL変数とすることができます。浮動小数点定数が指定された場合には,値は倍精度形式に変換され,呼び出されるプロシージャーに渡されます。パラメーターを渡す場合には,定数または変数の値は呼び出されるプログラムで使用可能となります。次の形式のパラメーターを渡すことはできません。すなわち,値のリスト,修飾名,式,ヌルのパラメーター(すなわち,その値がヌルのパラメーターで,*Nで指定される),またはキーワード・パラメーターの形式です。呼び出されるプログラムには最大255個のパラメーターを渡すことができます。

CALLコマンドを使用してパラメーターをプログラムに渡す場合には,パラメーターの値は,その値がCALLコマンド上に示された順序で渡されます。すなわち,この順序は,呼び出し側プログラムのパラメーター・リストに示される順序と一致していなければなりません。

呼び出されるプログラム中のパラメーターは,その変数のかわりに使用することができます。しかし,呼び出されるプログラムの記憶域は,それが受け取る変数と関連付けられます。その代わりに,変数が渡される場合には,その変数の記憶域が初めにそれが宣言されたプログラム内に入っています。定数が渡される場合には,呼び出し先プログラムで定数のコピーが作成され,そのコピーが呼び出されるプログラムに渡されます。

その結果,変数が渡された場合には,呼び出されるプログラムはその値を変更することができ,その変更は呼び出し側プログラムに反映されることになります。定数が渡され,その値は呼び出されるプログラムによって変更された場合には,変更された値は呼び出し側プログラムには通知されません。したがって,呼び出し側プログラムが同じプログラムをもう一度呼び出すと,定数の値は元の値にリセットされます。

ジョブ投入(SBMJOB)コマンド内でのCALLコマンドを使用して変数パラメーターを渡すことの説明は,IBM I INFORMATION CENTER (HTTP://WWW.IBM.COM/SYSTEMS/I/INFOCENTER/)の「実行管理機能」トピック・コレクションにあります。

制約事項:

パラメーター

キーワード 記述 選択項目 ノーツ
PGM プログラム 修飾オブジェクト名 必須, 定位置 1
修飾子 1: プログラム 名前
修飾子 2: ライブラリー 名前, *LIBL, *CURLIB
PARM パラメーター 値 (最大 255 回の繰り返し): 無制限 オプショナル, 定位置 2

プログラム (PGM)

呼び出し先のプログラムを指定します。

これは必須パラメーターです。

修飾子1: プログラム

名前
呼び出すプログラムの名前を指定してください。

修飾子2: ライブラリー

*LIBL
最初に一致するものが見つかるまで,現行スレッドのライブラリー・リスト内のすべてのライブラリーが検索されます。
*CURLIB
プログラムを見つけるために,スレッドの現行ライブラリーが使用されます。スレッドの現行ライブラリーとして指定されているライブラリーがない場合,QGPLライブラリーが使用されます。
名前
プログラムが入っているライブラリーの名前を指定してください。

パラメーター (PARM)

呼び出されたプログラムに渡す1つ以上のパラメーター値を指定します。最大で255個のパラメーター値を渡すことができます。

どの値も,次のいずれかの形式で指定しなければなりません。文字ストリング定数,数値定数,論理定数,倍精度浮動小数点定数,またはプログラム変数。

各パラメーターのタイプと長さは,呼び出し側プログラムと受け取り側プログラムの両方で一致していなければなりません。また,パラメーターの数と受け渡しされる順序も同じでなければなりません。CALLコマンドが対話式または非コンパイルのバッチ環境で入力された場合には,呼び出されるプログラムで必要となるタイプおよび長さは,そのコマンドで渡される各パラメーターのものと一致していなければなりません。

パラメーターは次の通り受け渡しすることができます。

注: パラメーター値をCLプログラムまたはILE CLプロシージャーによって変更するか,あるいはCLコマンドに変数として指定する場合には,それが書き込み可能記憶域になければなりません。例えば,CまたはC++では,ストリングが読み取り専用である場合があります。読み取り専用ストリングがパラメーターとしてCLプログラムまたはILE CLプロシージャーに渡され,CLプロシージャーが変数の値を変更したり,CLコマンドの変数を使用しようとした場合には,そのCLプログラムまたはILE CLプロシージャーは正常に実行されません。

1:プログラムの呼び出し

CALL   PGM(PAYROLL)

PAYROLLという名前のプログラムが呼び出されますが,このプログラムに渡されるパラメーターはありません。ライブラリー・リストを使用して呼び出し先プログラムを見つけます。

2:文字定数の引き渡し

CALL   PGM(PAYROLL)  PARM('1')

PAYROLLという名前のプログラムが呼び出され,文字定数が引用符付きストリングとして渡されます。プログラムは,最大32文字からなるフィールドを,定数を受け取るフィールドとして宣言しなければなりません。ライブラリー・リストを使用して呼び出し先プログラムを見つけます。

3: パラメーターの引き渡し

CALL   PGM(LIB1/PAYROLL)  PARM(CHICAGO 1234 &VAR1)

ライブラリーLIB1に入っているPAYROLLという名前のプログラムが呼び出されます。呼び出し側プログラムは3つのパラメーター,すなわち,文字ストリング(CHICAGO), 10進値(1234.00000),およびCL変数&VAR1の内容を渡します。変数の属性が3番目のパラメーターの属性を決定します。

4:浮動小数点値を伴うプログラムの呼び出し

CALL   PGM(PGM1)  PARM(1.5E3 *INF)

PGM1という名前のプログラムが呼び出され,2つの倍精度浮動小数点値がそのプログラムに渡されます。

エラー・メッセージ

*ESCAPE メッセージ

CPD0783
パラメーター&2の変数&3はTYPE(*DEC), LEN(&4,&5)でなければならない。
CPF0005
戻されたコマンド・ストリングが指定した長さの変数を超えている。
CPF0006
コマンドでエラーが起こった。
CPF0805
&2のプログラム&1を開始した時にエラーが見つかった。
CPF0806
プロシージャーの開始時にエラーが見つかった。