コマンド・プロシージャ
本章では、コマンド・プロシージャの使用方法について説明します。
1. 制御変数
以下は、コマンド・プロシージャで使用される制御変数の一覧です。
制御変数 | 説明 |
---|---|
&LASTCC |
最近のリターンコードです。以下は、コマンド・プロシージャのリターンコードとその説明です。
|
&MAXCC |
リターンコードの最大値です。 |
&SYS#CC |
ENDJOBNAMEイベントが発生した場合に設定されます。完了したジョブの完了コードです。 |
&SYS#EVENT |
発生したイベント名です。この制御変数は以下の値のいずれかを持ちます。
|
&SYS#EVTNO |
WAIT文で1つのオペランドに複数の値を指定した場合、指定した値のうち、発生したイベントに対応する値が格納されます。 |
&SYS#FMSG |
MESSAGEイベントまたはMSGIDイベントが発生した場合に設定され、出力されたメッセージ全体が格納されます。 |
&SYS#JN |
ENDJOBNAMEイベントが発生した場合に設定され、完了したジョブのジョブ名です。 |
&SYS#MSG |
MESSAGEイベントまたはMSGIDイベントが発生した場合に設定され、出力されたメッセージのボディ部が格納されます。 |
&SYS#PFX |
MESSAGEイベントまたはMSGIDイベントが発生した場合に設定され、出力されたメッセージの識別子が格納されます。 |
&SYSASIS |
|
&SYSCONLIST |
|
&SYSDATE |
mm/dd/yy形式の現在の日付です。 |
&SYSDVAL |
ユーザーが最近端末に入力した文字列です。 |
&SYSENV |
|
&SYSFLUSH |
|
&SYSICMD |
コマンド・プロシージャ名です。 暗黙的な実行の場合、つまりユーザーがEXEC文を利用して明示的にコマンド・プロシージャを実行しない場合のみ使用されます。 |
&SYSNEST |
|
&SYSPCMD |
最近実行したTSOコマンド(パラメータを除く)です。(デフォルト値: EXEC) |
&SYSPREF |
データセット名の接頭語です。 |
&SYSSCAN |
各コマンド・プロシージャを実行する前に実行する最大スキャン数(記号パラメータを値に置換するプロセス)を指定します。 |
&SYSSDATE |
yy-mm-dd形式の現在の日付です。 |
&SYSSTIME |
hh:mm形式の現在の時刻です。 |
&SYSSTOP |
コマンド・プロシージャ内で実行可能な最大コマンド数です。 |
&SYSSYMLIST |
|
&SYSTIME |
hh:mm:ss形式の現在の時刻です。 |
&SYSTMID |
現在接続されている端末名です。 |
&SYSUID |
TSOセッションのユーザーIDです。 |
&SYSWEEK |
略称で表した現在の曜日です。この制御変数は次のいずれかの値を持ちます。
|
2. 組込み関数
以下は、コマンド・プロシージャで使用される組込み関数の一覧です。
組込み関数 | 説明 |
---|---|
&DATATYPE(expr) |
表現式のexprの結果が数値の場合はNUMを返し、文字列の場合はCHARを返します。 |
&EVAL(expr) |
数式のexprの演算結果を返します。 |
&LENGTH(expr) |
表現式のexprの演算結果の文字の長さを返します。 |
&NRSTR(expr) |
表現式のexprの記号パラメータは置換するが、ネスト置換はしていない結果を返します。数式演算は実行しません。 |
&STR(expr) |
表現式のexprの記号パラメータを置換し、組込み関数を処理した結果を返します。数式演算は実行しません。 |
&SUBSTR(from:to,str) |
文字列のstrのfromの位置からtoの位置まで抽出した部分文字列を返します。toを省略すると、fromの位置の1文字のみ抽出します。 |
&SUBSTR(from:to,str) |
文字列のstrのfromの位置からtoの位置まで抽出した部分文字列を返します。toを省略すると、fromの位置の1文字のみ抽出します。 |
&SYSDSN(d) |
データセットのdの状態チェックし、使用可能な状態にあればOKを返し、そうでなければエラーメッセージを返します。 |
&SYSINDEX(needle, haystack,start) |
文字列haystack内で文字列needleの位置を返します。 startが0か省略された場合、haystack全体でneedleを検索します。startが正の値の場合、haystackのstart番目の文字からneedleを検索します。needleが見付からなかった場合は0を返します。 |
&SYSNSUB(level,expr) |
表現式のexprの記号パラメータを置換します。(最大のlevel回) |
3. 演算子
IF文などの一部のコマンド・プロシージャでは標準式が使用されることがあります。標準式は、整数、文字列、記号パラメータ、制御変数や組込み関数のようなオペランドを演算子を利用して連結した状態を意味します。
演算子は、算術演算子、比較演算子、論理演算子に分類され、各演算子の意味は以下のとおりです。
-
算術演算子
算術演算子 説明 +
加算
-
減算
*
乗算
/
除算
**
指数(右辺が負数の場合、演算結果は0です)
//
残り
-
比較演算子
比較演算子 説明 EQ または =
左辺と右辺が等しい
NE または ^=
左辺と右辺が等しくない
LT または <
左辺が右辺より小さい
GT または >
左辺が右辺より大きい
LE または <=
左辺が右辺より小さいか等しい
GE または >=
左辺が右辺より大きいか等しい
NG または ^>
左辺が右辺より大きくない
NL または ^<
左辺が右辺より小さくない
-
論理演算子
論理演算子 説明 AND または &&
論理積
OR または |
論理和
4. コマンド・プロシージャ文
コマンド・プロシージャ文の種類と機能は以下のとおりです。
コマンド・プロシージャ文 | 説明 |
---|---|
割り込みハンドラを設定します。OpenFrameでは構文エラーのみチェックします。 |
|
データセットを閉じます。 |
|
コマンド・プロシージャの実行関連オプションを指定します。 |
|
TSOコマンドと画面の出力データ領域を区切ります。 |
|
1つ以上のコマンド・プロシージャを繰り返し実行します。 |
|
エラー・ハンドラを設定します。 |
|
コマンド・プロシージャの実行を停止し、上位コマンド・プロシージャに制御を返します。 |
|
データセットからレコードを読み込みます。 |
|
ネストされたコマンド・プロシージャ間で共有される記号パラメータを宣言します。 |
|
指定された場所に移動します。 |
|
指定された条件に基づいて互いに異なる動作を実行します。 |
|
画面の出力データが保存されるデータセットを指定します。OpenFrameでは構文エラーのみチェックします。 |
|
データセットを開きます。 |
|
上位コマンド・プロシージャから受け取った記号パラメータを定義します。 |
|
データセットにレコードを記録します。 |
|
端末でユーザーから入力されたデータを記号パラメータに保存します。 |
|
&SYSDVALの内容を記号パラメータに保存します。 |
|
エラーが発生したコマンド・プロシージャの次のコマンド・プロシージャに制御を返します。 |
|
記号パラメータまたは制御変数に式の値を保存します。 |
|
ユーザーが入力できるように、端末に制御を渡します。OpenFrameでは構文エラーのみチェックします。 |
|
端末に文字列を出力します。 |
4.2. CLOSFILE文
OPENFILE文で開いたデータセットを閉じます。
-
構文
項目 説明 ddname
OPENFILE文で開いたデータセットのDD名です。
-
使用例
以下は、CLOSFILE文の使用例です。
CLOSFILE SYSUT1
4.3. CONTROL文
コマンド・プロシージャの実行関連オプションを指定します。
-
構文
項目 説明 end
DOグループの終了文字列を指定します。
-
オペランド
以下は、CONTROL文のオペランドについての説明です。
オペランド 説明 PROMPT
ターミナル・プロンプトを使用します。OpenFrameでは構文エラーのみチェックします。(略語: P)
NOPROMPT
ターミナル・プロンプトを使用しません。OpenFrameでは構文エラーのみチェックします。(略語: NOP)
SYMLIST
記号パラメータの置換前のコマンドを端末に表示します。(略語: S)
NOSYMLIST
記号パラメータの置換前のコマンドを端末に表示しません。(略語: NOS)
LIST
コマンドを表示します。OpenFrameでは構文エラーのみチェックします。(略語: L)
NOLIST
コマンドを表示しません。OpenFrameでは構文エラーのみチェックします。(略語: NOL)
CONLIST
記号パラメータの置換後のコマンドを端末に表示します。(略語: C)
NOCONLIST
記号パラメータの置換後のコマンドを端末に表示しません。(略語: NOC)
CAPS
コマンドの実行前に小文字を大文字に変換します。(略語: CA)
NOCAPS
コマンドの実行前に小文字を大文字に変換しません。
ASIS
コマンドの実行前に小文字を大文字に変換しません。(略語: A)
MSG
情報メッセージを表示します。OpenFrameでは構文エラーのみチェックします。(略語: MS)
NOMSG
情報メッセージを表示しません。OpenFrameでは構文エラーのみチェックします。(略語: NOM)
FLUSH
コマンド・プロシージャの実行中にエラーが発生すると、以降のコマンド・プロシージャは実行しません。(略語: F)
NOFLUSH
コマンド・プロシージャの実行中にエラーが発生しても、以降のコマンド・プロシージャを実行します。(略語: NOF)
MAIN
コマンド・プロシージャが他のコマンド・プロシージャによって呼び出されなかったことを意味します。
END
DOグループの終了文字列を指定します。
-
使用例
以下は、CONTROL文の使用例です。
CONTROL END(FIN)
4.4. DATA-ENDDATA文
DATA文とENDDATA文の間のデータを別途処理します。オペランドを指定していない場合は、DATA文とENDDATA文の間のデータをTSOコマンドと見なします。オペランド指定時の処理方法については、以下のオペランドの説明を参照してください。
-
構文
-
オペランド
以下は、DATA-ENDDATA文のオペランドについての説明です。
オペランド 説明 PROMPT
DATA文とENDDATA文の間のデータをプロンプト・データと見なします。記号パラメータがあれば置換えます。
TEXT
DATA文とENDDATA文の間のデータをテキストと見なします。記号パラメータがあっても置換えません。
-
使用例
以下は、DATA-ENDDATA文の使用例です。
DO DATA PROFILE NOPREFIX ENDDATA END
4.5. DO-END文
DO文とENDまたはDOEND文の間のTSOコマンドとコマンド・プロシージャ(以下、DOグループ)を実行します。
-
構文
項目 説明 expression
DOグループの繰り返し状態の判断条件を表現式の形式で指定します。
-
オペランド
以下は、DO-END文のオペランドについての説明です。
オペランド 説明 UNTIL
UNTILの次に指定されている表現式の値が偽の間、 DOグループを繰り返し実行します。
WHILE
WHILEの次に指定されている表現式の値が真の間、DOグループを繰り返し実行します。
-
使用例
以下は、DO-END文の使用例です。
DO WHILE &LASTCC LE 4 SET A=&A+1 CALL TESTPGM '&A' END
4.6. ERROR文
コマンド・プロシージャの実行中に下位TSOコマンドあるいはコマンド・プロシージャのリターンコードが0でない場合に実行するジョブ(以下、エラー・ハンドラ)を指定します。ERROR DOとENDの間でEXIT文、RETURN文、GOTO文が現れると、その位置でエラー・ハンドラを終了します。エラー・ハンドラの実行後、&LASTCCは0でリセットされます。
-
構文
項目 説明 action
エラー・ハンドラを指定します。複数のジョブを記述する場合は、DO文とEND文の間に記述します。
-
オペランド
以下は、ERROR文のオペランドについての説明です。
オペランド 説明 OFF
すでに指定されているエラー・ハンドラをキャンセルします。
-
使用例
以下は、ERROR文の使用例です。
ERROR DO WRITE &LASTCC RETURN END
4.7. EXIT文
コマンド・プロシージャの実行を中止し、上位コマンド・プロシージャに制御を返します。
-
構文
項目 説明 code
リターンコードを指定します。
-
オペランド
以下は、EXIT文のオペランドについての説明です。
オペランド 説明 CODE
リターンコードを指定します。CODEオペランドが省略された場合は&LASTCC値がリターンコードになります。
QUIT
CONTROL NOFLUSHあるいはMAINが指定された上位コマンド・プロシージャで制御を返します。
-
使用例
以下は、EXIT文の使用例です。
ERROR DO EXIT CODE(&MAXCC) END
4.8. GETFILE文
データセットからレコードを読み込みます。レコードは指定されたDD名と同じ名前の記号パラメータに保存されます。
-
構文
項目 説明 ddname
OPENFILE文で開いたデータセットのDD名を指定します。
-
使用例
以下は、GETFILE文の使用例です。
OPENFILE FILE1 UPDATE GETFILE FILE1 SET FILE1=UPDATED PUTFILE FILE1 CLOSFILE FILE1
4.9. GLOBAL文
ネストされたコマンド・プロシージャ間で共有される記号パラメータを宣言します。
最上位のコマンド・プロシージャには下位コマンド・プロシージャと共有する記号パラメータが全部宣言されている必要があります。下位コマンド・プロシージャでは最上位のコマンド・プロシージャのGLOBAL文で宣言された記号パラメータ全体または一部をGLOBAL文に別途の名前で宣言後、使用することができます。
上位コマンド・プロシージャのGLOBAL文のn番目の記号パラメータは下位コマンド・プロシージャのGLOBAL文のn番目の記号パラメータと同じ値を参照します。
-
構文
項目 説明 variable
記号パラメータ名を指定します。
-
使用例
以下は、GLOBAL文の使用例です。COMP1でCOMP2を呼び出し、COMP2でCOMP3を呼び出します。GA1とGB1とGC1は同じ値を参照します。GA2とGB2とGC2は同じ値を参照します。GA3とGC3は同じ値を参照します。GA4とGC4は同じ値を参照します。
-
COMP1
PROC 0 AP1,AP2 GLOBAL GA1,GA2,GA3,GA4 SET &GA1=&AP1 SET &GA2=&AP2 SET &GA3=0 SET &GA4=&AP1+2 EXEC COMP2
-
COMP2
GLOBAL GB1,GB2 EXEC COMP3
-
COMP3
GLOBAL GC1,GC2,GC3,GC4
-
4.10. GOTO文
指定された場所に移動します。
-
構文
項目 説明 dest
移動する場所のラベルです。
-
使用例
以下は、GOTO文の使用例です。
SET &CNT=2 GOTO TAG&CNT TAG1: WRITE CNT IS NOT TWO TAG2: WRITE CNT IS TWO
4.11. IF-THEN-ELSE文
表現式の値に基づいて互いに異なる動作を実行します。
-
構文
項目 説明 expression
判断の基準になる表現式です。表現式の値が真の場合はthen_actionを実行し、偽の場合はelse_actionを実行します。
then_action
expressionの値が真の場合に実行するTSOコマンドあるいはコマンド・プロシージャです。DOグループの場合もあります。
else_action
expressionの値が偽の場合に実行するTSOコマンドあるいはコマンド・プロシージャです。DOグループの場合もあります。
-
使用例
以下は、IF-THEN-ELSE文の使用例です。
IF &LASTCC EQ 0 THEN- WRITE ZERO ELSE- WRITE NONZERO
4.12. INDATA文
プロンプト・データが保存されるデータセットを指定します。DATAとENDDATA文の間にプロンプトまたはテキスト・モードで記述された内容をINDATA文の後に記述されたDDで出力します。
-
構文
項目 説明 parameters
DATAとENDDATA文の間に記述された内容を保存するDD名を指定します。OpenFrameでは、ジョブ・スプール・ディレクトリの下に一時ファイルを作成してその内容を保存しています。
-
使用例
以下は、INDATA文の使用例です。
INDATA SYSIN
4.13. OPENFILE文
データセットを開きます。
-
構文
項目 説明 ddname
データセットのDD名を指定します。
-
オペランド
以下は、OPENFILE文のオペランドについての説明です。
オペランド 説明 INPUT
データセットを入力モードで開きます。省略した場合は入力モードで開きます。
OUTPUT
データセットを出力モードで開きます。
UPDATE
データセットを更新モードで開きます。
-
使用例
以下は、OPENFILE文の使用例です。
ALLOC DD(INP) DS(MY.DATA) OPENFILE INP
4.14. PROC文
上位のコマンド・プロシージャから受け取った記号パラメータを定義します。キーワード指定の記号パラメータは位置指定の記号パラメータの後に記述する必要があります。
-
構文
項目 説明 n
位置指定の記号パラメータの数を指定します。
name
パラメータの名前を指定します。
default_value
パラメータのデフォルト値を指定します。値が指定されていない場合、パラメータ値はnullに初期化されます。
-
使用例
以下は、PROC文の使用例です。
PROC 3 PP1 PP2 PP3 KP1(DEFVAL1) KP2
4.15. PUTFILE文
指定されているDD名と同じ名前の記号パラメータに保存されたデータをデータセットに記録します。
-
構文
項目 説明 ddname
OPENFILE文で開いたデータセットのDD名を指定します。
-
使用例
以下は、PUTFILE文の使用例です。
OPENFILE FILE1 UPDATE GETFILE FILE1 SET FILE1=UPDATED PUTFILE FILE1 CLOSFILE FILE1
4.16. READ文
ユーザーによって端末から入力されたデータを記号パラメータに保存します。オペランドを省略した場合は&SYSDVALに保存します。
-
構文
項目 説明 param
ユーザーによって端末から入力されたデータが保存される変数名を指定します。
-
使用例
以下は、READ文の使用例です。
READ ANS1
4.17. READDVAL文
制御変数&SYSDVALの内容を指定された記号パラメータに保存します。オペランドを省略した場合は何も行いません。
-
構文
項目 説明 param
&SYSDVALの内容が保存される変数名を指定します。
-
使用例
以下は、READDVAL文の使用例です。
SET SYSDVAL=&STR(SMITH JONES KELLY) READDVAL NAME1,NAME2,NAME3
4.18. RETURN文
エラーが発生したコマンド・プロシージャの次のコマンド・プロシージャに制御を返します。
-
構文
-
使用例
以下は、RETURN文の使用例です。
ERROR DO WRITE &LASTCC RETURN END
4.19. SET文
記号パラメータまたは制御変数に表現式の値を保存します。
-
構文
項目 説明 param
記号パラメータまたは制御変数の名前を「&」記号の後に指定します。「&」記号は省略できます。
expression
式を指定します。等号またはEQ文字列右辺に指定し、数値の演算または文字列を記述することができます。expressionに演算記号ではない文字が1つでも含まれている場合は、expression全体を文字列と見なします。expressionにSET文で宣言したparam変数を指定するには、変数名の前に「&」記号を付ける必要があり、その変数はSET文で指定した値に置き換えられます。対応するparam変数がない場合は、文字列として扱います。
-
使用例
以下は、SET文の使用例です。
SET A=2*3+1 SET &B=5+&A SET C=&B+B
上記のSET文で指定した変数Aには6が代入されます。Bの値は11になり、Cに代入される値は「11 + B」という文字列です。