コマンド・プロシージャ

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

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です。

&SYSWEEK

略称で表した現在の曜日です。この制御変数は次のいずれかの値を持ちます。

  • SUN

  • MON

  • TUE

  • WED

  • THU

  • FRI

  • SAT

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グループの終了文字列を指定します。

  • オペランド

    以下は、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コマンドと見なします。オペランド指定時の処理方法については、以下のオペランドの説明を参照してください。

  • 構文

    figure data stmt

    image

  • オペランド

    以下は、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グループ)を実行します。

  • 構文

    figure do stmt

    image

    項目 説明

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

  • 構文

    figure error stmt
    項目 説明

    action

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

  • オペランド

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

    オペランド 説明

    OFF

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

  • 使用例

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

    ERROR DO
             WRITE &LASTCC
             RETURN
          END

4.7. EXIT文

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

  • 構文

    figure exit stmt

    image

    項目 説明

    code

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

  • オペランド

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

    オペランド 説明

    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文

プロンプト・データが保存されるデータセットを指定します。DATAとENDDATA文の間にプロンプトまたはテキスト・モードで記述された内容をINDATA文の後に記述されたDDで出力します。

  • 構文

    figure indata stmt
    項目 説明

    parameters

    DATAとENDDATA文の間に記述された内容を保存するDD名を指定します。OpenFrameでは、ジョブ・スプール・ディレクトリの下に一時ファイルを作成してその内容を保存しています。

  • 使用例

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

    INDATA SYSIN

4.13. OPENFILE文

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

  • 構文

    figure openfile stmt
    項目 説明

    ddname

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

  • オペランド

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

    オペランド 説明

    INPUT

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

    OUTPUT

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

    UPDATE

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

  • 使用例

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

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

4.14. PROC文

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

  • 構文

    figure proc stmt

    image

    項目 説明

    n

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

    name

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

    default_value

    パラメータのデフォルト値を指定します。値が指定されていない場合、パラメータ値はnullに初期化されます。

  • 使用例

    以下は、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 SYSDVAL=&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

    式を指定します。等号または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」という文字列です。

4.20. TERMIN文

フォアグラウンドでのみ使用可能であり、ユーザーが入力できるように、端末に制御を渡します。OpenFrameでは構文エラーのみチェックします。

  • 構文

    figure termin stmt

4.21. WRITE/WRITENR文

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

  • 構文

    figure write stmt
    項目 説明

    text

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

  • 使用例

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

    WRITE HELLO WORLD