コマンド・プロシージャ

本章では、コマンド・プロシージャの使用方法について説明します。

1. 制御変数

以下は、コマンド・プロシージャで使用される制御変数の一覧です。

制御変数 説明

&LASTCC

最近のリターンコードです。以下は、コマンド・プロシージャのリターンコードとその説明です。

  • 300 : 変更できない制御変数を変更した場合です。

  • 312 : GLOBAL文が正しくありません。

  • 332 : データセット名が有効ではありません。

  • 340 : OPENFILE文のオペランドが正しくありません。

  • 348 : OPENFILE文に指定されたデータセットを開くことができません。

  • 352 : GETFILE文に指定されたデータセットが開かれていません。

  • 360 : PUTFILE文に指定されたデータセットが開かれていません。

  • 368 : CLOSFILE文に指定されたデータセットが開かれていません。

  • 372 : 更新モードで開かれているデータセットに対し、GETFILE文を実行する前にPUTFILE文を実行した場合です。

  • 400 : GETFILE文の実行中にファイルの末尾に達した場合です。

  • 848 : 算術式に整数以外の変数が記述されています。

  • 900 : ampersand(&)の後ろにキーワードが定義されていません。

  • 912 : &SUBSTR関数のfromの値がtoの値より大きいです。

  • 916 : &SUBSTR関数のfromあるいはtoの値が整数でないか、またはEXIT文のCODEオペランドの値が整数でない場合です。

  • 920 : &SUBSTR関数のfromあるいはtoの値が負の値であるか、またはEXIT文のCODEオペランドの値が負の値である場合です。

  • 932 : &SUBSTR関数のfromあるいはtoの値が文字列の範囲を超えた場合です。

  • 936 : 組み込み関数の形式が正しくありません。

  • 952 : GOTO文に指定された移動先が見つかりません。

  • 956 : GOTO文に移動先が指定されていません。

  • 972 : TERMIN文をバッチジョブに使用した場合です。

  • 999 : コマンド・プロシージャの呼び出しに失敗しました。

&MAXCC

リターンコードの最大値です。

&SYS#CC

ENDJOBNAMEイベントが発生した場合に設定されます。完了したジョブの完了コードです。

&SYS#EVENT

発生したイベント名です。この制御変数は以下の値のいずれかを持ちます。

  • TIME

  • DATE

  • WEEK

  • INTERVAL

  • READYJOBNAME

  • ENDJOBNAME

  • MESSAGE

  • MSGID

  • SYSTEM

  • USEREVENT

  • DATASET

  • MOUNT

  • SYSOUT

  • ONDEVICE

&SYS#EVTNO

WAIT文で1つのオペランドに複数の値を指定した場合、指定した値のうち、発生したイベントに対応する値が格納されます。

&SYS#FMSG

MESSAGEイベントまたはMSGIDイベントが発生した場合に設定され、出力されたメッセージ全体が格納されます。

&SYS#JN

ENDJOBNAMEイベントが発生した場合に設定され、完了したジョブのジョブ名です。

&SYS#MSG

MESSAGEイベントまたはMSGIDイベントが発生した場合に設定され、出力されたメッセージのボディ部が格納されます。

&SYS#PFX

MESSAGEイベントまたはMSGIDイベントが発生した場合に設定され、出力されたメッセージの識別子が格納されます。

&SYSASIS

  • ON : コマンドの実行前に小文字を大文字に変換しません。

  • OFF : コマンドの実行前に小文字を大文字に変換します。

&SYSCONLIST

  • ON : 記号パラメータの置換後、コマンドを端末に表示します。

  • OFF : 記号パラメータの置換後、のコマンドを端末に表示しません。

&SYSDATE

mm/dd/yy形式の現在の日付です。

&SYSDVAL

ユーザーが最近端末に入力した文字列です。

&SYSENV

  • BACK : コマンド・プロシージャがバッチジョブの一部として実行中の場合です。

  • FORE : コマンド・プロシージャがバッチジョブの一部として実行中ではない場合です。

&SYSFLUSH

  • ON : コマンド・プロシージャの実行中にエラーが発生すると、以降のコマンド・プロシージャは実行しません。

  • OFF : コマンド・プロシージャの実行中にエラーが発生しても、以降のコマンド・プロシージャを実行します。

&SYSICMD

コマンド・プロシージャ名です。

暗黙的な実行の場合、つまりユーザーがEXEC文を利用して明示的にコマンド・プロシージャを実行しない場合のみ使用されます。

&SYSNEST

  • YES : コマンド・プロシージャが他のコマンド・プロシージャによって呼び出された状態です。

  • NO : コマンド・プロシージャが他のコマンド・プロシージャによって呼び出された状態ではありません。

&SYSPCMD

最近実行したTSOコマンド(パラメータを除く)です。(デフォルト値: EXEC)

&SYSPREF

データセット名の接頭語です。

&SYSSCAN

各コマンド・プロシージャを実行する前に実行する最大スキャン数(記号パラメータを値に置換するプロセス)を指定します。

&SYSSDATE

yy-mm-dd形式の現在の日付です。

&SYSSTIME

hh:mm形式の現在の時刻です。

&SYSSTOP

コマンド・プロシージャ内で実行可能な最大コマンド数です。

&SYSSYMLIST

  • ON : 記号パラメータの置換前、コマンドを端末に表示します。

  • OFF : 記号パラメータの置換前、コマンドを端末に表示しません。

&SYSTIME

hh:mm:ss形式の現在の時刻です。

&SYSTMID

現在接続されている端末名です。

&SYSUID

TSOセッションのユーザーIDです。

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. コマンド・プロシージャ文

コマンド・プロシージャ文の種類と機能は以下のとおりです。

コマンド・プロシージャ文 説明

ATTN文

割り込みハンドラを設定します。OpenFrameでは構文エラーのみチェックします。

CLOSFILE文

データセットを閉じます。

CONTROL文

コマンド・プロシージャの実行関連オプションを指定します。

DATA-ENDDATA文

TSOコマンドと画面の出力データ領域を区分します。

DO-END文

1つ以上のコマンド・プロシージャを繰り返し実行します。

ERROR文

エラー・ハンドラを設定します。

EXIT文

コマンド・プロシージャの実行を中止し、上位コマンド・プロシージャに制御を返します。

GETFILE文

データセットからレコードを読み込みます。

GLOBAL文

ネストされたコマンド・プロシージャ間で共有される記号パラメータを宣言します。

GOTO文

指定された場所に移動します。

IF-THEN-ELSE文

指定された条件に基づいて互いに異なる動作を実行します。

INDATA文

画面の出力データが保存されるデータセットを指定します。OpenFrameでは構文エラーのみチェックします。

OPENFILE文

データセットを開きます。

PROC文

上位のコマンド・プロシージャから受け取った記号パラメータを定義します。

PUTFILE文

データセットにレコードを記録します。

READ文

端末でユーザーから入力されたデータを記号パラメータに保存します。

READDVAL文

&SYSDVALの内容を記号パラメータに保存します。

RETURN文

エラーが発生したコマンド・プロシージャの次のコマンド・プロシージャに制御を返します。

SET文

記号パラメータあるいは制御変数に表現式の値を保存します。

TERMIN文

ユーザーが入力できるように、端末に制御を渡します。OpenFrameでは構文エラーのみチェックします。

WRITE/WRITENR文

端末に文字列を出力します。

4.1. ATTN文

割り込みハンドラを設定します。OpenFrameでは構文エラーのみチェックします。

使用法
figure attn stmt

4.2. CLOSFILE文

OPENFILE文で開いたデータセットを閉じます。

使用法
figure closfile stmt
項目 説明

ddname

OPENFILE文で開いたデータセットのDD名です。

使用例

以下は、CLOSFILE文の使用例です。

CLOSFILE SYSUT1

4.3. CONTROL文

コマンド・プロシージャの実行関連オプションを指定します。

使用法
figure control stmt

image

image

image

image

image

image

image

image

項目 説明

end

DOグループの終了文字列を指定します。

オペランド

以下は、オペランドについての説明です。

オペランド 説明

PROMPT

ターミナル・プロンプトを使用します。OpenFrameでは構文エラーのみチェックします。

NOPROMPT

ターミナル・プロンプトを使用しません。OpenFrameでは構文エラーのみチェックします。

SYMLIST

記号パラメータの置換前のコマンドを端末に表示します。

NOSYMLIST

記号パラメータの置換前のコマンドを端末に表示しません。

LIST

コマンドを表示します。OpenFrameでは構文エラーのみチェックします。

NOLIST

コマンドを表示しません。OpenFrameでは構文エラーのみチェックします。

CONLIST

記号パラメータの置換後のコマンドを端末に表示します。

NOCONLIST

記号パラメータの置換後のコマンドを端末に表示しません。

CAPS

コマンドの実行前に小文字を大文字に変換します。

NOCAPS

コマンドの実行前に小文字を大文字に変換しません。

ASIS

コマンドの実行前に小文字を大文字に変換しません。

MSG

情報メッセージを表示します。OpenFrameでは構文エラーのみチェックします。

NOMSG

情報メッセージを表示しません。OpenFrameでは構文エラーのみチェックします。

FLUSH

コマンド・プロシージャの実行中にエラーが発生すると、以降のコマンド・プロシージャは実行しません。

NOFLUSH

コマンド・プロシージャの実行中にエラーが発生しても、以降のコマンド・プロシージャを実行します。

MAIN

コマンド・プロシージャが他のコマンド・プロシージャによって呼び出されなかったことを意味します。

END

DOグループの終了文字列を指定します。

使用例

以下は、CONTROL文の使用例です。

CONTROL END(FIN)

4.4. DATA-ENDDATA文

DATA文とENDDATA文の間のデータを別途処理します。オペランドを指定していない場合は、DATA文とENDDATA文の間のデータをTSOコマンドと見なします。オペランド指定時の処理方法については、以下のオペランドの説明を参照してください。

使用法
figure data stmt

image

オペランド

以下は、オペランドについての説明です。

オペランド 説明

PROMPT

DATA文とENDDATA文の間のデータをプロンプト・データと見なします。記号パラメータがあれば置換えます。

TEXT

DATA文とENDDATA文の間のデータをテキストと見なします。記号パラメータがあっても置換えません。

使用例

以下は、DATA-ENDDATA文の使用例です。

DO
  DATA
    PROFILE NOPREFIX
  ENDDATA
END

4.5. DO-END文

DO文とENDまたはDOEND文の間のTSOコマンドとコマンド・プロシージャ(以下、DOグループ)を実行します。

使用法
figure do stmt

image

項目 説明

expression

DOグループの繰り返し状態の判断条件を表現式の形式で指定します。

オペランド

以下は、オペランドについての説明です。

オペランド 説明

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でリセットされます。

使用法
figure error stmt
項目 説明

action

エラー・ハンドラを指定します。複数の作業を記述するには、DO文とEND文の間に記述します。

オペランド

以下は、オペランドについての説明です。

オペランド 説明

OFF

既に指定されているエラー・ハンドラをキャンセルします。

使用例

以下は、ERROR文の使用例です。

ERROR DO
         WRITE &LASTCC
         RETURN
      END

4.7. EXIT文

コマンド・プロシージャの実行を中止し、上位コマンド・プロシージャに制御を返します。

使用法
figure exit stmt

image

項目 説明

code

リターンコードを指定します。

オペランド

以下は、オペランドについての説明です。

オペランド 説明

CODE

リターンコードを指定します。CODEオペランドが省略された場合は&LASTCC値がリターンコードになります。

QUIT

CONTROL NOFLUSHあるいはMAINが指定された上位コマンド・プロシージャで制御を返します。

使用例

以下は、EXIT文の使用例です。

ERROR DO
         EXIT CODE(&MAXCC)
      END

4.8. GETFILE文

データセットからレコードを読み込みます。レコードは指定されたDD名と同じ名前の記号パラメータに保存されます。

使用法
figure getfile stmt
項目 説明

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番目の記号パラメータと同じ値を参照します。

使用法
figure global stmt
項目 説明

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文

指定された場所に移動します。

使用法
figure goto stmt
項目 説明

dest

移動する場所のラベルです。

使用例

以下は、GOTO文の使用例です。

      SET &CNT=2
      GOTO TAG&CNT
TAG1: WRITE CNT IS NOT TWO
TAG2: WRITE CNT IS TWO

4.11. IF-THEN-ELSE文

表現式の値に基づいて互いに異なる動作を実行します。

使用法
figure if stmt

image

項目 説明

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文

プロンプト・データが保存されるデータセットを指定します。OpenFrameでは構文エラーのみチェックします。

使用法
figure indata stmt

4.13. OPENFILE文

データセットを開きます。

使用法
figure openfile stmt
項目 説明

ddname

データセットのDD名を指定します。

オペランド

以下は、オペランドについての説明です。

オペランド 説明

INPUT

データセットを入力モードで開きます。省略した場合は入力モードで開きます。

OUTPUT

データセットを出力モードで開きます。

UPDATE

データセットを更新モードで開きます。

使用例

以下は、OPENFILE文の使用例です。

ALLOC DD(INP) DS(MY.DATA)
OPENFILE INP

4.14. PROC文

上位のコマンド・プロシージャから受け取った記号パラメータを定義します。キーワード指定の記号パラメータは位置指定の記号パラメータの後に記述する必要があります。

使用法
figure proc stmt

image

項目 説明

n

位置指定の記号パラメータの数を指定します。

name

パラメータの名前を指定します。

default_value

パラメータのデフォルト値を指定します。

使用例

以下は、PROC文の使用例です。

PROC 3 PP1 PP2 PP3 KP1(DEFVAL1) KP2()

4.15. PUTFILE文

指定されているDD名と同じ名前の記号パラメータに保存されたデータをデータセットに記録します。

使用法
figure putfile stmt
項目 説明

ddname

OPENFILE文で開いたデータセットのDD名を指定します。

使用例

以下は、PUTFILE文の使用例です。

OPENFILE FILE1 UPDATE
GETFILE FILE1
SET FILE1=UPDATED
PUTFILE FILE1
CLOSFILE FILE1

4.16. READ文

端末でユーザーから入力されたデータを記号パラメータに保存します。オペランドを省略した場合は&SYSDVALに保存します。

使用法
figure read stmt
項目 説明

param

端末を通じてユーザーが入力したデータが保存される変数名を指定します。

使用例

以下は、READ文の使用例です。

READ ANS1

4.17. READDVAL文

制御変数&SYSDVALの内容を指定された記号パラメータに保存します。オペランドを省略した場合は何も行いません。

使用法
figure readdval stmt
項目 説明

param

&SYSDVALの内容が保存される変数名を指定します。

使用例

以下は、READDVAL文の使用例です。

SET READDVAL=&STR(SMITH JONES KELLY)
READDVAL NAME1,NAME2,NAME3

4.18. RETURN文

エラーが発生したコマンド・プロシージャの次のコマンド・プロシージャに制御を返します。

使用法
figure return stmt
使用例

以下は、RETURN文の使用例です。

ERROR DO
         WRITE &LASTCC
         RETURN
      END

4.19. SET文

記号パラメータあるいは制御変数に表現式の値を保存します。

使用法
figure set stmt
項目 説明

param

記号パラメータあるいは制御変数の名前を指定します。

expression

表現式を指定します。

使用例

以下は、SET文の使用例です。

SET A=2*3+1

4.20. TERMIN文

ユーザーが入力できるように、端末に制御を渡します。OpenFrameでは構文エラーのみチェックします。

使用法
figure termin stmt

4.21. WRITE/WRITENR文

端末に文字列を出力します。WRITE文の場合は文字列の出力後にカーソルを次の行に移し、WRITENR文の場合は文字列の出力後にカーソルを次の行に移しません。

使用法
figure write stmt
項目 説明

text

端末に出力する文字列を指定します。

使用例

以下は、WRITE文の使用例です。

WRITE HELLO WORLD