その他のユーティリティ

本章では、その他のユーティリティについて説明します。

1. 概要

以下は、その他のユーティリティの一覧です。各ユーティリティについての詳細は、各節で説明します。

  • Batch

    プログラム名 説明

    ADAPT

    簡単なコマンドでデータセットを操作します。

    DSDIFF

    データセットの各レコードの違いを表示します。

    EZTPA00

    JCLのSYSINで入力されたCA-Easytrieve Plusスクリプトを実行します。

    FTP

    バッチ・ジョブからリモート・ホストにデータセットを送信するか、リモート・ホストからデータを受信してデータセットに保存します。

    ICETOOL

    SORTユーティリティ・プログラムを使用して、1つのジョブ・ステップで複数のデータセットを出力します。

    IEFBR14

    JCLが正常に実行されているかどうかを確認します。

    IKJEFT01

    データベースを使用するバッチ・プログラムをJCLで実行する際、アプリケーションが実行される前にデータベース・システムに接続させます。

    ISRSUPC

    2つのデータセットを比較するか、1つのデータセット内の特定の文字列を検索します。

    PGMRTS00

    JCLを使用して共有オブジェクトとしてコンパイルされたバッチ・アプリケーションを実行する際、OpenFrame/BatchのJCLランナーによって間接的に実行されます。

2. ADAPT

ADAPTは、簡単なコマンドを使用してアプリケーションの処理などに使用されるデータセットを操作できるユーティリティ・プログラムです。

コピー(COPY)、編集(EDIT)、比較(COMP)、印刷(PRINT)、ダンプ(LIST)、変更(ALTER)、追加(INSERT)、チェック(CHECK)機能があります。現在は、コピー(COPY)、編集(EDIT)、変更(ALTER)機能のみサポートしています。

2.1. DDの設定

以下は、DDの設定項目です。

項目 説明

SYSIN DD

ADAPTに必要なコマンドを指定します。

SYSPRINT DDまたは

SYSOUT DD

ADAPTの実行中に発生したメッセージが出力されます。

任意のDD

ADAPTの入力データセットまたは出力データセットを指定します。SYSINでINPUT、OUTPUT、OUT2(ddname)を使用して任意のDDを使用するように指定します。

2.2. コマンドの設定

SYSIN DDを使用して次の順でコマンドを指定することができます。複数を指定することも可能です。

  1. 機能制御コマンド:COPY, EDIT, ALTER

  2. 条件制御コマンド:KEY, K, R, ED, A

以下は、コマンドを指定するときの注意事項です。

  • コマンドは空白または文字(/)で始まる必要があります。

  • コマンドは70文字を超えないようにします。

  • コマンドの後の空白以降はコメントとして処理されます。

COPY

コマンドに指定された条件に従ってレコードを抽出、削除、分類します。

以下は、COPYコマンドの構文です。

COPY OUTPUT,INPUT[,OUT2(ddname)]
パラメータ 説明

OUTPUT

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

INPUT

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

OUT2

OUT2を指定すると、抽出条件に合わないレコードはOUT2に設定されたDD名で出力されます。ddnameには、分類用のデータセットのDD名を指定します。

EDIT

コマンドに指定された条件に従ってレコードを抽出し、そのレコード内の項目を編集して出力します。抽出しないレコードは出力せずにスキップします。

以下は、EDITコマンドの構文です。

EDIT OUTPUT,INPUT
パラメータ 説明

OUTPUT

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

INPUT

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

ALTER

コマンドに指定された条件に従ってレコードを抽出し、その内容をコマンドに指定された内容で変更して出力します。変更しないレコードはそのまま出力し、変更されるレコードは変更後の内容を印刷できます。

以下は、ALTERコマンドの構文です。

ALT[ER] OUTPUT,INPUT
パラメータ 説明

OUTPUT

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

INPUT

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

KEY

条件を指定するコマンドです。入出力レコード形式を指定します。

以下は、KEYコマンドの構文です。

KEY keypos,keylen,keyfmt[,keypos,keylen,keyfmt,...]
パラメータ 説明

keypos

キー・フィールドの開始位置を指定します。

keylen

キー・フィールドの長さを指定します。

keyfmt

キー・フィールドの形式を指定します。現在は、XとPのみ使用できます。

  • X:文字(Character)

  • 9:10進数(Decimal)

  • P:パック10進数(Packed Decimal)

  • H:16進数(Hex Decimal)

  • HL:2進数(Binary)

K

抽出条件を指定するコマンドです。レコードの内容を指定します。現在は、COPYとALTERコマンドでのみ使用できます。

以下は、Kコマンドの構文です。

KEY keynum,operator,value[,keynum,operator,value,...]
パラメータ 説明

keynum

KEY文で設定されたキー番号を指定します。

operator

比較演算子を指定します。

  • G または >:データ > 値

  • L または <:データ < 値

  • E または =:データ = 値

  • NG または N>:データ <= 値

  • NL または N<:データ >= 値

  • NE または N=:データ != 値

value

比較するデータを指定します。単一引用符(')で囲まれた文字列または整数の値を指定できます。

R

抽出条件を指定するコマンドです。レコードの数を指定します。現在は、ALTERコマンドでのみ使用できます。

以下は、Rコマンドの構文です。

R startnum[,endnum]
パラメータ 説明

startnum

開始レコードの番号を指定します。

endnum

終了レコードの番号を指定します。データセットの最後まで処理するEOFを指定します。指定しない場合は、最初のレコードのみ処理されます。

ED

編集条件を指定するコマンドです。EDIT機能コマンドでのみ使用します。

以下は、EDコマンドの構文です。

ED recvnum=sendnum
パラメータ 説明

recvnum

編集するキー番号を指定します。KEY文に設定されたキー番号を指定します。

sendnum

編集する内容を含むキー番号を指定します。KEY文に設定されたキー番号を指定します。

A

ALTER機能コマンドを使用する際、変更項目を指定します。

以下は、Aコマンドの構文です。

A keypos,keylen,keyfmt,value
パラメータ 説明

keypos

変更項目の開始位置を指定します。

keylen

変更項目の長さを指定します。

keyfmt

変更項目の形式を指定します。KEYコマンドのkeyfmtと同じ形式です。

value

変更内容を指定します。単一引用符(')で囲まれた文字列または整数の値を指定できます。

2.3. 使用例

以下は、OPENFRAME.ADAPT.U01データセットをOPENFRAME.ADAPT.U11データセットにコピーする例です。レコードの8番目の文字が「4」で、225番目の文字が「2」のレコードをコピーし、それ以外はOPENFRAME.ADAPT.U10データセットにコピーします。

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//COPY     EXEC PGM=ADAPT
//U01      DD DSN=OPENFRAME.ADAPT.U01,DISP=SHR
//U10      DD DSN=OPENFRAME.ADAPT.U10,DISP=SHR
//U11      DD DSN=OPENFRAME.ADAPT.U11,DISP=SHR
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
/      COPY    U11,U01,OUT2(U10)
/      KEY     8,1,X,225,1,X
/      K       1,E,'4'
/      K       2,E,'2'
/*

以下は、OPENFRAME.ADAPT.U01データセットの内容を編集してOPENFRAME.ADAPT.U02データセットに保存する例です。レコードの179番目の文字から始まる長さ3の文字列を、147番目の文字から始まる長さ3の文字列に編集します。

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//COPY     EXEC PGM=ADAPT
//U01      DD DSN=OPENFRAME.ADAPT.U01,DISP=SHR
//U02      DD DSN=OPENFRAME.ADAPT.U02,DISP=SHR
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
/      EDIT    U02,U01
/      KEY     147,3,X,179,3,X
/      ED      2=1
/*

以下は、OPENFRAME.ADAPT.U01データセットの内容を変更してOPENFRAME.ADAPT.U10データセットに保存する例です。144番目の文字から始まる長さ6の文字列が「498830」で、8番目の文字から始まる長さ3の文字列が「100」のレコードである場合、対象レコードの169番目の文字から始まる長さ5の文字列を「00100」に変更し、179番目の文字から始まる長さ6の文字列を「001000」に変更します。

144番目の文字から始まる長さ6の文字列が「498830」で、8番目の文字から始まる長さ3の文字列が「101」のレコードの場合、対象レコードの169番目の文字から始まる長さ5の文字列を「00200」に変更し、179番目の文字から始まる長さ6の文字列を「002000」に変更します。

//JOB03    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//COPY     EXEC PGM=ADAPT
//U01      DD DSN=OPENFRAME.ADAPT.U01,DISP=SHR
//U10      DD DSN=OPENFRAME.ADAPT.U10,DISP=SHR
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
/      ALTER   U10,U01
/      KEY     144,6,X,8,3,X
/      K       1,E,'498830',2,E,'100'
/      A       169,5,X,'00100'
/      A       179,6,X,'001000'
/      K       1,E,'498830',2,E,'101'
/      A       169,5,X,'00200'
/      A       179,6,X,'002000'
/*

2.4. 戻りコード

以下は、ADAPTユーティリティの戻りコードです。

  • 正常に実行された場合

    コード0を返し、それ以外の場合はコード10を返します。

  • エラーが発生した場合

    • SYSPRINT DDにエラーメッセージを出力し、エラーコード8を返します。それ以外の場合はエラーコード50を返します。

    • 一般的なエラーより重大なエラーが発生した場合はエラーコード12を返し、それ以外の場合はエラーコード50を返します。

3. DSDIFF

DSDIFFは、データセットの各レコードの相違点を表示するユーティリティ・プログラムです。

OpenFrameのインストール後、またはユーティリティやライブラリなどの各種モジュールを更新した後に実行する検証テストです。データセットが正常に作成されたかどうかを確認するために使用できます。

3.1. DDの設定

以下は、DDの設定項目です。

項目 説明

SYSIN DD

比較するデータセットのddnameリストを定義します。

リストの区切り子としてコンマ(,)を使用します。たとえば、「AA,BB,CC」は、AA、BB、CCを比較します。

TARGET DD

比較するデータセットを定義します。比較データセットは、SYSIN DDに定義されたddnameリストに含まれる必要があります。

3.2. コマンドの設定

以下は、データセット・リストを定義するSYSIN DDの構文です。

ddname,ddname[ddname,....]

SYSIN DDにデータセット・リストを定義するほか、別途設定が必要なコマンドはありません。

3.3. 使用例

以下は、EXPECTED、INREC、SUM DDの3つのレコードを比較して相違点を表示する例です。

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//DSDIFF   EXEC PGM=DSDIFF,REGION=2M
//SYSIN    DD  *
EXPECTED,INREC,SUM
/*
//SYSOUT   DD SYSOUT=*
//EXPECTED DD  DSN=OFTEST.SORT.OUT01.EXPECTED,DISP=OLD
//INREC    DD  DSN=OFTEST.SORT.OUT01.INREC,DISP=OLD
//SUM      DD  DSN=OFTEST.SORT.OUT01.SUM,DISP=OLD

3.4. 戻りコード

レコード長が異なると、最短レコード長までのすべてのデータが一致しても異なるレコードと見なします。

以下は、DSDIFFユーティリティの戻りコードです。

  • 正常に実行された場合

    バッチ・アプリケーションからの戻りコードを返します。

  • エラーが発生した場合

    SYSPRINT DDにエラーメッセージを出力し、該当するエラーコードを返します。

    コード 説明

    4

    レコードの1つ以上の違いがある場合です。

    16

    SYSINで指定されたddnameが存在しないか、データセットの入出力エラーが発生した場合です。OpenFrameまたはUNIXエラーです。

4. EZTPA00

EZTPA00は、JCLのSYSINで入力されたCA-Easytrieve Plusスクリプトを実行するユーティリティ・プログラムです。

外部プログラムである弊社のProTrieveを使用してスクリプトを実行します。外部プログラムのための環境設定が必要です。CA-Easytrieve Plusスクリプトを使用してデータセットの入出力、データの加工、レポートの作成などを実行できます。

以下の図は、EZTPA00のプロセスを示しています。CA-Easytrieve PlusスクリプトがProTrieveに渡されて実行されます。

figure eztpa00 2
EZTAP00のプロセス

CA-Easytrieve Plusスクリプトの詳細については、ProTrieveガイドを参照してください。

4.1. DDの設定

以下は、DDの設定項目です。

項目 説明

SYSIN DD

CA-Easytrieve Plusスクリプトの入力データセットを指定します。

SYSPRINT DD

CA-Easytrieve Plusの結果として作成されたレポートまたはDISPLAYで記述されたメッセージの出力データセットを指定します。

SYSOUT DD

CA-Easytrieve Plusの実行中にEZTPA00、ProTrieveから発生したメッセージの出力データセットを指定します。

anyname DD

CA-Easytrieve Plus文でファイルを処理するために使用されるデータセットを指定します。DD名は、CA-Easytrieve Plusスクリプトのファイル名と同じである必要があります。

4.2. 使用例

以下は、EZTPA00を使用してFILEAからFILEBにコピーする例です。

//SAMPLE   JOB  CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//EZPLUS   EXEC PGM=EZTPA00
//SYSPRINT DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//FILEA    DD DSN=OPENFRAME.EZPLUS.FILEA,DISP=SHR
//FILEB    DD DSN=OPENFRAME.EZPLUS.FILEB,DISP=(NEW,CATLG),
//         DCB=(RECFM=FB,LRECL=1024,BLKSIZE=10240)
//SYSIN DD *
FILE FILEA
    RECA        1             1024  A
FILE FILEB
    RECB        1             1024  A
*
JOB INPUT FILEA
    MOVE FILEA TO FILEB
    PUT FILEB
/*

SYSOUT DDが存在しないと、ユーティリティの実行中に発生したメッセージがSYSPRINTに出力され、目的のSYSPRINTの出力結果を得られない場合があります。

4.3. 環境設定

EZTPA00を実行するためにOpenFrame環境設定のezplusサブジェクトのセクションを設定します。

ezplusサブジェクトの詳細については、OpenFrame Batch『環境設定ガイド』を参照してください。

4.4. 戻りコード

以下は、EZTPA00ユーティリティの戻りコードです。

  • 正常に実行された場合

    外部プログラムからの戻りコード0を返します。

  • エラーが発生した場合

    戻りコード16を返します。より詳しいエラーメッセージは、SYSOUT DDに出力されます。

5. FTP

FTPは、バッチ・ジョブからリモート・ホストにデータセットを送信するか、リモート・ホストからデータを受信してデータセットに格納するユーティリティ・プログラムです。

5.1. DDの設定

以下は、DDの設定項目です。

項目 説明

INPUT DDまたは

SYSIN DD

FTPユーティリティ制御文を指定します。

SYSPRINT DD

メッセージを出力するデータセットを指定します。

OUTPUT DD

UNIX/Linux FTPプログラムで発生するメッセージを出力するデータセットを指定します。

OUTPUT DDを指定すると、UNIX/Linux FTPプログラムの実行中に発生するメッセージはOUTPUT DDに出力され、FTPユーティリティで発生するメッセージはSYSPRINT DDに出力されます。

OUTPUT DDを指定しない場合、すべてのメッセージはSYSPRINT DDに出力されます。

5.2. コマンドの設定

FTPを実行するには、次のようにJCL EXEC文を指定します。

//STEP  EXEC  PGM=FTP

以下の項目を使用して、INPUT DDまたはSYSIN DDにFTP制御文を定義します。

項目 説明

connect_ip

INPUT DDの先頭にFTPサーバー接続のためのIPを設定します。(必須)

user_id password

INPUT DDのconnect_ipの後にFTPサーバー認証のためのユーザーIDとパスワードを指定します。必須項目です。

KSC5601

(NOTYPE | BIN | ASC)

ファイル転送形式(BINARYまたはASCII)を指定します。

SJISKANJI

(NOTYPE | BIN | ASC)

ファイル転送形式(BINARYまたはASCII)を指定します。

BINARY | BIN

ファイル転送形式をBINARYに変更します。

ASCII | ASC

ファイル転送形式をASCIIに変更します。

STAT

リモート・ホストの現在の状態を表示します。

OpenFrame環境設定のftpサブジェクトのOPTIONセクションのSECURE_FTPキーのVALUE項目がYESに設定されている場合はサポートされません。

CLOSE

リモート・ホストとの接続を切断します。

DIR

リモート・ホストの現在のディレクトリ情報を検索します。

QUIT

FTPプログラムを終了します。

LS

リモート・ホストの現在のディレクトリ情報を検索します。

PWD

リモート・ホストの現在のディレクトリを表示します。

LOCSITE

RECFM、LRECL、BLKSIZEなどを追加で指定し、ローカル・ホストで作成されたデータセットのレコード形式とレコード長を変更します。

QUOTE

リモート・ホストに任意のftpコマンドを送信します。

CD

リモート・ホストのディレクトリを変更します。

LCD

ローカル・ホストのディレクトリを変更します。

DELETE | ERASE

リモート・ホストのファイルを削除します。

RENAME | REN

リモート・ホストのファイル名を変更します。

RMDIR

リモート・ホストのディレクトリの削除します。

MKDIR

リモート・ホストのディレクトリを作成します。

SET MAXCC

エラーが発生した場合の戻りコードを指定します。

PUT

ローカル・ホストのファイルまたはデータセットをリモート・ホストに転送します。データセットを転送する場合は、データセット名を単一引用符で囲みます。

GET(REPLACE)

リモート・ホストのファイルをローカル・ホストに転送します。

データセットを転送する場合は、データセット名を単一引用符で囲みます。基本的な転送形式はBINARYです。ASCII形式で転送する場合は、ファイルを改行単位で読み込んでデータセットに書き込みます。

転送するファイルがローカル・ホストに存在する場合は、REPLACEオプションの指定の有無によって以下のように処理されます。

  • REPLACEオプションが指定されている場合は、警告メッセージを出力し、そのファイルを上書きします。

  • REPLACEオプションが指定されていない場合は、エラーが発生します。

OpenFrame環境設定のftpサブジェクトのOPTIONセクションのSECURE_FTPキーのVALUE項目がYESに設定されている場合、REPLACEオプションはサポートされません。

OpenFrame環境設定のftpサブジェクトのOPTIONセクションのFTP_HANDLE_DATASETキーのVALUE項目の値によって追加処理が必要な場合があります。

APPEND

リモート・ホストにすでに存在しているファイルにデータを追加します。ただし、リモート・ホストに指定のファイルが存在しない場合は新しく作成されます。

OpenFrame環境設定のftpサブジェクトのOPTIONセクションのSECURE_FTPキーのVALUE項目がYESに設定されている場合はサポートされません。

//DD:ddname

転送するデータセットを指定する際、データセット名を単一引用符で囲むのではなく、//DD:の後ろにddnameを指定します。この場合、そのステップ内でJCL DD文のデータセットを使用します。

SENDSITE

実際には機能せず、エラーの発生を防ぐためにサポートされます。

MDELETE

リモート・ホストから複数のファイルを削除します。

PROMPT

対話型または非対話型モードを設定します。

OpenFrame環境設定のftpサブジェクトのOPTIONセクションのSECURE_FTPキーのVALUE項目がYESに設定されている場合はサポートされません。

TYPE(I|i|A|a)

データ転送形式を指定します。このコマンドを指定しない場合は、UNIX/LinuxのFTPモードによってデフォルト・タイプが指定されます。

  • I | i : BINARYに指定します。

  • A | a : ASCIIに指定します。

ftpサブジェクトの設定項目については、OpenFrame Batch『環境設定ガイド』を参照してください。

5.3. 使用例

以下は、127.0.0.1 FTPサーバーに接続して、FTPTEST01.TXTファイルをhome/ftptest/tempディレクトリにアップロードする例です。

//FTP01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//PMFTP    EXEC PGM=FTP,PARM='(EXIT'
//INPUT    DD *
  127.0.0.1
 ftptest ftptest
 KSC5601 (NOTYPE
 CD /home/ftptest/temp/
 PUT 'FTPTEST01'   /home/ftptest/temp/FTPTEST01.TXT
 QUIT
/*
//SYSPRINT DD SYSOUT=*
/*

以下は、127.0.0.1 FTPサーバー接続して、/home/ftptest/tempディレクトリのFTPTEST02.TXTファイルをローカル・ホストのOFTEST.FTP.GET01データセットにダウンロードする例です。

//FTP02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//PMFTP    EXEC PGM=FTP
//DD1      DD DSN=OFTEST.FTP.GET01,DISP=(NEW,CATLG,DELETE),DCB=(RECFM=FB,LRECL=80)
//INPUT    DD *
  127.0.0.1
 ftptest ftptest
 KSC5601 (NOTYPE
 GET /home/ftptest/temp/FTPTEST02.TXT //DD:DD1
 QUIT
/*
//SYSPRINT DD SYSOUT=*
/*

5.4. 環境設定

FTPプログラムは、一時ファイルの場所を指定するか、FTPサーバーからのエラーコードを識別するためにftpサブジェクトとofsysサブジェクトの情報を利用します。また、権限の認証のためには、dsサブジェクトの情報を利用します。

FTPは、GETコマンドを実行するとき、GETコマンドにターゲット・データセットのパスがない場合は、ofsysサブジェクトの一時ディレクトリにファイルをダウンロードします。また、FTPユーティリティの実行中に作成される一時ファイルのディレクトリとしてftpサブジェクトのディレクトリ情報を利用します。

環境設定の詳細については、OpenFrame Batch『環境設定ガイド』を参照してください。

6. ICETOOL

ICETOOLは、SORTユーティリティ・プログラムを使用して、1つのジョブ・ステップで複数のデータセットを出力するためのユーティリティ・プログラムです。TOOLIN DDで指定されたコマンドに従って、SORTユーティリティ・プログラムを使用してデータを処理します。

以下は、ICETOOLが提供する主要機能です。

  • ソートされた入力データセットのコピーを作成します。

  • 修正または修正されていない入力データセットのコピーを作成します。

  • 修正または修正されていない入力データセットのレコード数を出力します。

  • 文字と数字フィールドまたは一意の値が発生した総回数などの多様な基準で入力データセットを含む出力データセットを作成します。

  • 異なる形式のレコード・フィールドをマージして、1つまたは複数のレコードで出力します。

6.1. DDの設定

以下は、DDの設定項目です。

項目 説明

TOOLMSG

ICETOOLの出力メッセージを格納します。

DFSMSG

ICETOOLがSORTプログラムを内部的に使用中に出力されるメッセージを格納します。

TOOLIN

ICETOOLコマンドを指定します。

indd

ICETOOLの入力データセットを指定します。TOOLINでFROM(indd)を介してinddを使用するように指定します。

outdd

ICETOOLのCOPY、SELECT、SORTの実行時に使用される出力データセットを指定します。TOOLINでTO(outdd)を介してoutddを使用するように指定します。

savedd

ICETOOLのSELECTの実行時に使用される出力データセットを指定します。TOOLINでDISCARD(savedd)を介してsaveddを使用するように指定します。

countdd

ICETOOLのCOUNTの実行時に使用される出力データセットを指定します。

xxxxCNTL

ICETOOLが内部的に使用するSORTのコマンドを指定します。TOOLINでUSING xxxxを介してxxxxCNTL DDを使用するように指定します。

6.2. コマンドの設定

ICETOOLで設定できるコマンドについて説明します。

COPY

inddに指定されたデータを1つ以上のoutddにコピーします。USING句を介してxxxxCNTLを使用してSORTを実行することもできます。

以下は、COPYコマンドの構文です。

COPY FROM(indd)
      TO(outdd,[outdd,...]) | USING(xxxx) | {TO(outdd,[outdd,....])
      USING(xxxx)} [VSAMTYPE(x)] [SERIAL]
パラメータ 説明

FROM

COPYコマンドを実行する入力データセットを指定します。

TO

COPYコマンドの実行結果が格納される出力データセットを指定します。

outddにはすべて同じ結果が格納されます。TOとUSINGは同時に指定することが可能であり、いずれか1つを必ず指定してください。

USING

COPYで使用されるSORTのコマンドを指定します。

USINGが指定されている場合は、xxxxCNTL DDを必ず指定します。また、TOが指定されていない場合は、xxxxCNTL ddにOUTFILとして出力データセットを指定する必要があります。

VSAMTYPE

実際には機能せず、エラーの発生を防ぐためにサポートされます。

SERIAL

実際には機能せず、エラーの発生を防ぐためにサポートされます。

COUNT

入力データセットのレコード数を出力します。USING句がある場合は、再フォーマットされた後のレコード数を出力します。

以下は、COUNTコマンドの構文です。

COUNT FROM(indd) [USING(xxxx)]
    [RC4] [EMPTY] [EQUAL(v)] [WRITE(countdd)] [TEXT('string')]
    [DIGITS(d)]
パラメータ 説明

FROM

COUNTコマンドを実行する入力データセットを指定します。

USING

COUNTコマンドで使用されるSORTユーティリティのコマンドを指定します。

RC4

RC4が指定されると、EMPTY、NOTEMPTY、HIGHER(x)、LOWER(y)、EQUAL(v)、NOTEQUAL(w)などの条件を満たす場合にRC=4を返します。

OpenFrameでは、EMPTYのみサポートされます。(デフォルト値: RC=12)

EMPTY

入力データセットが空の場合は、RC=12(RC4が指定された場合はRC=4)を返し、そうでない場合は、RC=0を返します。

EQUAL(v)

COUNTコマンドの結果としてレコードの数がv個の場合、RC=12(RC4が指定された場合は、RC=4)を返します。

WRITE(countdd)

countddを指定します。countddは、レコード数を出力するデータセットのddnameを意味します。countdd DDの形式は、FBのみ指定できます。

TEXT('string')

countddデータセットに文字列を出力します。レコード数は、その文字列の後に出力されます。TEXTは、WRITEが指定された場合にのみ使用できます。

DIGITS(d)

レコード数が出力される桁数を指定します。DIGITSを指定しない場合のデフォルト値は15です。

DISPLAY

inddで指定された入力データを設定値に従って出力します。

以下は、DISPLAYコマンドの構文です。

DISPLAY FROM(indd)
        LIST(listdd) ON(p,m,f)[ ON(p,m,f) ...]
        ON(p,m,f,E'pattern')[ ON(p,m,f,E'pattern') ...] ON(VLEN)
        ON(NUM) TITLE('string1') PAGE DATE(abcd) TIME(abc)
        BLANK HEADER('string1') [HEADER('string1') ...]
        LINES(n) COUNT('string') WIDTH(n) BETWEEN(n)
パラメータ 説明

FROM

入力データセット名を指定します。

LIST

出力されるリスト・データセット名を指定します。

ON(p,m,f)

DISPLAYコマンドが適用されるフィールドを定義します。pバイトからmバイトまで、f形式で適用します。

使用できるf形式については、OpenFrame Batch『SORTユーティリティリファレンスガイド』の「OUTFIL」の「OUTREC | BUILD」を参照してください。

ON(p,m,f,E’pattern')

DISPLAYコマンドが適用されるフィールドを定義します。pバイトからmバイトまでf形式に変換した後、「pattern」に指定した形でDISPLAYコマンドを適用します。

使用できるf形式は、OpenFrame Batch『SORTユーティリティリファレンスガイド』の「OUTFIL」の「OUTREC | BUILD」を参照してください。

ON(VLEN)

入力レコードが可変長レコード(VB)の場合、レコード長を表示します。

ON(1,2,BI)と同じです。VLENフィールド長のデフォルトは16バイトです。

ON(NUM)

レコード番号は1から始まり、各レコードごとに1ずつ増加した値を表示します。

TITLE('string1')

タイトル行のタイトル(string1)を出力します。タイトル行は、リスト・データセットの最初の行に出力されます。

PAGE

タイトル行に現在のページを出力します。

DATE(abcd)

タイトル行に現在の日付を表示します。

  • abc : M(月)、D(日)、Y(年)または4の組み合わせで構成されます。Yは2桁年を、4は4桁年を出力します。

  • d : 区切り文字として使用される任意の文字です。

TIME(abc)

タイトル行に現在の時刻を表示します。

  • ab : 12時間制または24時間制で表示します。

  • c : 区切り文字として使用される任意の文字です。

BLANK

数値フィールドの先行ゼロを空白で表示します。

HEADER('string1')

ONフィールドのタイトルを出力します。HEADERフィールドとONフィールドは、指定された順序に従って1対1で対応されます。

LINES(n)

1ページあたりの行数を表示します。(デフォルト値: 58、nの範囲: 10 ~ 999)

COUNT('string')

'string’を出力し、それに続いてレコード数を出力します。

WIDTH(n)

出力されるデータセットの行の長さを制限します。

BETWEEN(n)

出力されるデータセットの列スペースの数を指定します。(デフォルト値: 3、nの範囲: 0 ~ 50)

OCCUR(S)

指定されたフィールドと、そのフィールドが出現される回数を出力します。

以下は、OCCURコマンドの構文です。

OCCUR(S) FROM(indd)
      LIST(listdd) ON(p,m,f)[ ON(p,m,f) ...] ON(VLEN) ON(VALCNT) ON(VALCNT,Ndd)
      TITLE('string1') DATE(abcd) TIME(abc) BLANK HEADER('string1') [
      HEADER('string1') ...] NOHEADER LINES(n)
パラメータ 説明

FROM

入力データセット名を指定します。

LIST

出力されるリスト・データセット名を指定します。

ON(p,m,f)

OCCURコマンドが適用されるフィールドを定義します。pバイトからmバイトまで、f形式で適用します。

ON(VLEN)

入力レコードが可変長レコード(VB)の場合、レコード長を表示します。

ON(1,2,BI)と同じです。VLENフィールド長のデフォルトは16バイトです。

ON(VALCNT)

ON(p,m,f)で指定されたフィールドが現れる回数を表示します。VALCNTフィールド長のデフォルトは15バイトです。

ON(VALCNT,Ndd)

ON(p,m,f)で指定されたフィールドが現れる回数を表示します。VALCNTフィールドの長さはddバイトです。

TITLE('string1')

タイトル行のタイトル(string1)を出力します。タイトル行は、リスト・データセットの最初の行に出力されます。

DATE(abcd)

タイトル行に現在の日付を表示します。

  • abc : M(月)、D(日)、Y(年)または4の組み合わせで構成されます。Yは2桁年を、4は4桁年を出力します。

  • d : 区切り文字として使用される任意の文字です。

TIME(abc)

タイトル行に現在の時刻を表示します。

  • ab : 12時間制または24時間制で表示します。

  • c : 区切り文字として使用される任意の文字です。

BLANK

数値フィールドの先行ゼロを空白で表示します。

HEADER('string1')

ONフィールドのタイトルを出力します。HEADERフィールドとONフィールドは、指定された順序に従って1対1で対応されます。

NOHEADER

HEADERを表示しません。

LINES(n)

1ページあたりの行数を表示します。(デフォルト値: 58、nの範囲: 10 ~ 999)

SELECT

inddで指定された入力データを与えられた条件に従ってフィルタリングしてoutddに格納するか、またはフィルターを通過できなかったデータをsaveddに格納することができます。

以下は、SELECTコマンドの構文です。

SELECT FROM(indd) TO(outdd)
      | DISCARD(savedd) | {TO(outdd) DISCARD(savedd)}
      ON(p,m,f)[ ON(p,m,f)...]
      ALLDUPS | NODUPS | HIGHER(x) | LOWER(x) | EQUAL(x) | FIRST | LAST |
      FIRSTDUP | LASTDUP [VSAMTYPE(x)] [UZERO] [USING(xxxx)]
パラメータ 説明

FROM

入力データセット名を指定します。

TO

フィルタリングされたレコードを格納する出力データセット名を指定します。

DISCARD

フィルタリング後に廃棄されるレコードを格納するデータセット名を指定します。

ON

SELECTコマンドが適用されるフィールドを定義します。pバイトからmバイトまで、f形式で適用します。

ALLDUPS

ONフィールド値が入力データセット内で複数回現れるレコードのみを保存します。

NODUPS

ONフィールド値が入力データセット内で一度だけ現れるレコードのみを保存します。

HIGHER

ONフィールド値が入力データセット内でx回数より多く出現されたレコードのみを保存します。

LOWER

ONフィールド値が入力データセット内でx回数より少なく出現されたレコードのみを保存します。

EQUAL

ONフィールドの値が入力データセット内でx回数出現されたレコードのみを保存します。

FIRST

ONフィールド値が入力データセット内で一度だけ現れるレコードと複数回現れるレコードの最初のレコードのみを保存します。

LAST

ONフィールド値が入力データセット内で一度だけ現れるレコードと複数回現れるレコードの最後のレコードのみを保存します。

FIRSTDUP

ONフィールド値が入力データセット内で複数回現れるレコードの最初のレコードのみを保存します。

LASTDUP

ONフィールド値が入力データセット内で複数回現れるレコードの最後のレコードのみを保存します。

VSAMTYPE

実際には機能せず、エラーの発生を防ぐためにサポートされます。

UZERO

実際には機能せず、エラーの発生を防ぐためにサポートされます。

USING

SELECTコマンドで使用されるSORTのコマンドを指定します。

SORT

入力データセットをソートし、1つ以上の出力データセットへ出力します。入力データセットをソートおよび再フォーマットするためにSORTユーティリティを呼び出します。

以下は、SORTコマンドの構文です。

SORT FROM(indd) USING(xxxx)
    [TO(outdd,[outdd,...])] [VSAMTYPE(x)] [SERIAL]
パラメータ 説明

FROM

SORTコマンドを実行する入力データセットを指定します。

USING

SORTコマンドで使用されるSORTのコマンドを指定します。SORTではUSINGが指定される必要があり、xxxxCNTL DDには、SORTコマンドが含まれている必要があります。

TO

SORTの実行結果が保存される出力データセットを指定します。outddにはすべて同じ結果が保存されます。

VSAMTYPE

実際には機能せず、エラーの発生を防ぐためにサポートされます。

SERIAL

実際には機能せず、エラーの発生を防ぐためにサポートされます。

SPLICE

一致するオーバーレイ・レコード・フィールドがベース・レコードにオーバーレイされます。この機能を使用すると、異なる形式の複数の入力レコードを複数の情報を持つ1つの出力レコードとして結合することができます。

ONに基づいてマッチング・レコードをチェックします。最初のマッチング・レコードがベース・レコード、それ以外のレコードはオーバーレイ・レコードとして扱われます(このオプションが指定されていない場合は、最後のレコードがオーバーレイ・レコードとなります)。オーバーレイ・レコードにWITHが指定されたフィールドがベース・レコードのフィールドにオーバーレイされます。WITHフィールドを除いたベース・レコードのフィールドはそのまま維持されます。したがって、出力レコードはベース・レコードとオーバーレイ・レコードを組み合わせたものとなります。

SPLICE FROM(indd) TO(outdd)
    ON(p,m,f)[ ON(p,m,f) ...] WITH(p,m)[ WITH(p,m) ...] [WITHALL] [WITHEACH]
   [KEEPNODUPS] [KEEPBASE][USING(xxxx)]
パラメータ 説明

FROM

入力データセット名を指定します。

TO

結合されたレコードを格納する出力データセット名を指定します。

ON

レコード・マッチングが適用されるフィールドを定義します。

レコード・マッチングは、pバイトからmバイトまでf形式で適用されます。

WITH

オーバーレイ・レコードで指定されたフィールドの位置と長さに従ってベース・レコードをオーバーレイします。

WITHを複数回使用して複数のフィールドをオーバーレイすることができます。

WITHALL

すべてのオーバーレイ・レコードに対して各ベース・レコードをオーバーレイします。

WITHALLを指定しない場合、最後のオーバーレイ・レコードのみベース・レコードにオーバーレイされます。

WITHEACH

n番目のオーバーレイ・レコードを、n番目のWITHのベース・レコードに上書きします。

オーバーレイ・レコードがWITHの数よりも多い場合は、レコードを上書きしません。

KEEPNODUPS

一致しないレコードを削除せずに出力します。

KEEPNODUPSを指定しない場合、一致しないレコードは削除されます。

KEEPBASE

一致するレコードのうち、ベース・データセット(FROMに指定したデータセット)に指定したデータセットのレコードは削除せずに出力します。

KEEPBASEを指定しない場合、ベース・データセットに指定した一致するレコードは削除されます。

USING

SPLICEコマンドで使用されるSORTユーティリティ・コマンドを指定します。

DATASORT

inddとして与えられた入力データを1つ以上のヘッダー・レコードと1つ以上のトレーラー・レコードを元の入力レコード順にoutddにコピーします。USING句を介してxxxxCNTLを使用してSORTユーティリティを実行することもできます。

以下は、DATASORTコマンドの構文です。

DATASORT FROM(indd) TO(outdd) USING(xxxx)
      | [HEADER] | [FIRST] | [HEADER(u)] | [FIRST(u)]| [TRAILER] | [LAST] | [TRAILER(v)] | [LAST(v)] | [VSAMTYPE(x)]
パラメータ 説明

FROM

DATASORTコマンドを実行する入力データセットを指定します。

TO

DATASORTコマンドの実行後に保存する出力データセットを指定します。

USING(xxxx)

DATASORTで使用されるSORTユーティリティ・コマンドを指定します。

USINGがある場合は、xxxxCNTL DDを指定する必要があります。

HEADER

HEADER(1)と同じです。

FIRST

HEADER(1)と同じです。

HEADER(u)

データセットの先頭のu個のレコードは、SORTユーティリティを介さずに、出力データセットに直接コピーされます。それ以外のレコードは、SORTユーティリティに渡されます。

FIRST(u)

HEADER(u)と同じです。

TRAILER

TRAILER(1)と同じです。

LAST

TRAILER(1)と同じです。

TRAILER(v)

データセットの末尾のv個のレコードは、SORTユーティリティを介さずに、出力データセットに直接コピーされます。それ以外のレコードは、SORTユーティリティに渡されます。

LAST(v)

TRAILER(v)と同じです。

VSAMTYPEは、実際には機能せず、エラーの発生を防ぐためにサポートされます。

6.3. 使用例

以下は、OFTEST.ICETOOL.IN00をCPY1CNTL DDに指定されたSORTスクリプトを使用してOFTEST. ICETOOL.OUT00.COPYにコピーする例です。

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//ICECOPY  EXEC PGM=ICETOOL,REGION=2M
//ICEIN    DD DSN=OFTEST.ICETOOL.IN00,
//         DISP=(OLD,KEEP,KEEP),RECFM=FB,LRECL=80
//ICEOUT   DD DSN=OFTEST.ICETOOL.OUT00.COPY,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//TOOLIN   DD *
 COPY FROM(ICEIN) TO(ICEOUT) USING(CPY1)
/*
//CPY1CNTL DD *
 SORT FIELDS=COPY
/*

以下は、OFTEST.ICETOOL.IN00をCPY1CNTL DDに指定されたSORTスクリプトを使用して再フォーマットした後、レコード数をOFTEST. ICETOOL.OUT01.COUNTに出力する例です。

レコード数は、「OUTPUT RECORD COUNT =」の後ろに9桁の数値で出力されます。条件を満たすレコードが存在しない場合はRC=4を返し、存在する場合はRC=0を返します。

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//ICECOUNT EXEC PGM=ICETOOL,REGION=2M
//ICEIN    DD DSN=OFTEST.ICETOOL.IN00,
//         DISP=(OLD,KEEP,KEEP),RECFM=FB,LRECL=80
//CNTDD    DD DSN=OFTEST.ICETOOL.OUT01.COUNT,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//TOOLIN   DD *
 COUNT FROM(ICEIN) USING(CPY1) WRITE(CNTDD) -
 TEXT('OUTPUT RECORD COUNT = ') DIGITS(9) -
 EMPTY RC4
//CPY1CNTL DD *
 SORT FIELDS=COPY
 INCLUDE COND=(16,2,CH,EQ,C'08')
/*

以下は、OFTEST.ICETOOL.IN01をCPY1CNTL DDに指定されたSORTスクリプトを使用してOFTEST. ICETOOL.OUT01.ICECPY1とOFTEST.ICETOOL.OUT01.ICECPY2にコピーする例です。

OFTEST.ICETOOL.OUT01.ICECPY2で、レコードの16バイト目から2バイト(16から17バイト)を文字キーにして、データセット全体で重複しない場合はOFTEST.ICETOOL.OUT01.ICETOに格納し、重複する場合はOFTEST.ICETOOL.OUT01.ICESAVEに格納します。

//JOB03    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//ICECOPY  EXEC PGM=ICETOOL,REGION=2M
//ICEIN    DD DSN=OFTEST.ICETOOL.IN01,
//         DISP=(OLD,KEEP,KEEP),RECFM=FB,LRECL=80
//ICECPY1  DD DSN=OFTEST.ICETOOL.OUT01.ICECPY1,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//ICECPY2  DD DSN=OFTEST.ICETOOL.OUT01.ICECPY2,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//ICETO    DD DSN=OFTEST.ICETOOL.OUT01.ICETO,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//ICESAVE  DD   DSN=OFTEST.ICETOOL.OUT01.ICESAVE,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//TOOLIN   DD *
 COPY FROM(ICEIN) TO(ICECPY1,ICECPY2) USING(CPY1)
 SELECT FROM(ICECPY2) TO(ICETO) DISCARD(ICESAVE) ON(16,2,CH) NODUPS
/*
//CPY1CNTL DD *
 SORT FIELDS=COPY
/*

以下は、DISPLAYコマンドを実行してOFTEST.ICETOOL.IN01をOFTEST.ICETOOL.OUT01に出力する例です。

//JOB04    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//DISPLAY  EXEC PGM=ICETOOL,REGION=2M
//ICEIN    DD DSN=OFTEST.ICETOOL.IN01,
//         DISP=(OLD,KEEP,KEEP),RECFM=FB,LRECL=80
//ICEOUT   DD DSN=OFTEST.ICETOOL.OUT01,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//TOOLIN   DD *
   DISPLAY LINES(50) FROM(ICEIN) LIST(ICEOUT) -
   TITLE('TITLE') DATE(DM4.) TIME PAGE -
   HEADER('HEADER1') ON(10,3,CH) -
   BLANK -
   COUNT('COUNT')
/*

以下の例では、CTL1CNTL DDとCTL2CNTL DDを使用してOFTEST.ICETOOL.IN01とOFTEST.ICETOOL.IN02をそれぞれ再フォーマットした後、OFTEST.ICETOOL.TEMPに格納して再びOFTEST.ICETOOL.OUT01.COMBINEにSPLICEする例です。CTL3CNTL DDにOFTEST.ICETOOL.TEMPで15列が「1」ではないレコードは、OFTEST.ICETOOL.OUT01.FILTEREDに格納されます。

//JOB05    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//SPLICE   EXEC PGM=ICETOOL,REGION=2M
//IN1      DD DSN=OFTEST.ICETOOL.IN01,DISP=(OLD,KEEP,KEEP)
//IN2      DD DSN=OFTEST.ICETOOL.IN02,DISP=(OLD,KEEP,KEEP)
//TEMP     DD DSN=OFTEST.ICETOOL.TEMP,DISP=(MOD,PASS)
//COMBINE  DD DSN=OFTEST.ICETOOL.OUT01.COMBINE,DISP=(NEW,CATLG,DELETE)
//FILTERED DD DSN=OFTEST.ICETOOL.OUT01.FILTERED,DISP=(NEW,CATLG,DELETE)
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//TOOLIN   DD *
 COPY FROM(IN1) TO(TEMP) USING(CTL1)
 COPY FROM(IN2) TO(TEMP) USING(CTL2)
 SPLICE FROM(TEMP) TO(COMBINE) ON(5,5,ZD) WITH(15,17) USING(CTL3)
/*
//CTL1CNTL DD *
 SORT FIELDS=COPY
 OUTREC FIELDS=(1,14,31:X)
/*
//CTL2CNTL DD *
 SORT FIELDS=COPY
 OUTREC FIELDS=(5:1,5,15:7,15,30:33,2)
/*
//CTL3CNTL DD *
 OUTFIL FNAMES=FILTERED,OMIT=(15,1,CH,EQ,C'1')

以下は、OFTEST.ICETOOL.IN00の先頭から2個のレコードと最後の1つのレコードをOFTEST.ICETOOL.OUT00.DATSにコピーした後、残りのレコードをDATSCNTL DDに指定されたSORTスクリプトを使用してソートし、OFTEST.ICETOOL.OUT00.DATSにコピーする例です。

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//ICECOPY  EXEC PGM=ICETOOL,REGION=2M
//ICEIN    DD DSN=OFTEST.ICETOOL.IN00,
//         DISP=(OLD,KEEP,KEEP),RECFM=FB,LRECL=80
//ICEOUT   DD DSN=OFTEST.ICETOOL.OUT00.DATS,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,LRECL=80
//TOOLMSG  DD SYSOUT=*
//DFSMSG   DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//TOOLIN   DD *
 DATASORT FROM(ICEIN) TO(ICEOUT) HEADER(2) TRAILER USING(DATS)
/*
//DATSCNTL DD *
 SORT FIELDS=(1,8,CH,A)
/*

6.4. 戻りコード

以下は、ICETOOLユーティリティの戻りコードです。

  • 正常に実行された場合

    バッチ・アプリケーションからの戻りコードを返します。

  • エラーが発生した場合

    SYSPRINT DDにエラーメッセージを出力し、エラーコード16を返します。

7. IEFBR14

IEFBR14は、JCLが正常に実行されているかどうかを確認するためのテスト・ユーティリティ・プログラムです。内部的に実行するタスクはありません。

JCLが送信された後、JOBキューでJOBが正常に実行され、tjclrunが起動されてJCL DDにデータセットが割り振られてから、IEFBR14が正常に実行されたかどうかを確認することができます

7.1. DDの設定

設定するDDはありません。

7.2. コマンドの設定

設定するコマンドはありません。

7.3. 使用例

以下は、JCLの実行後にDATASET1が作成され、DATASET2が削除される例です。

//LISTPDS  JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//STEP01   EXEC PGM=IEFBR14
//NEW      DD DSNAME=DATASET1,DISP=(NEW,KEEP),
//            DCB=(RECFM=FB,LRECL=100,BLKSIZE=1000)
//DELETE   DD DSNAME=DATASET2,DISP=(OLD,DELETE)
//SYSPRINT DD SYSOUT=*
//SYSIN    DD DUMMY

7.4. 戻りコード

IEFBR14がバッチ・アプリケーションを実行した後、バッチ・アプリケーションからの戻りコードを返します。

8. IKJEFT01

IKJEFT01は、データベースを使用するバッチ・プログラムをJCLで実行する際、アプリケーションが実行される前にデータベース・システムに接続させるためのユーティリティ・プログラムです。

データベースを使用するCOBOLアプリケーションのソースにデータベース・システムへの接続に必要なシステム名、ユーザー名、パスワードなどの情報をコーディングするのではなく、IKJEFT01の入力スクリプトに指定します。

IKJEFT01で使用されるTSOスクリプトのPROGRAMオプションに定義されたプログラムは、共有オブジェクト形式にコンパイルする必要があります。

メインフレームでは、TSO接続機能(TSO Attachment Facility)を使用してDB2に接続した後、DB2アプリケーションを実行させます。 TSO接続機能は、TSO端末またはバッチ・プログラムからDB2に接続できるようにするDB2モジュールです。 IKJEFT01は、TSOコマンドを使用してバッチ・ジョブを処理できるOpenFrameのデータベース接続ユーティリティ・プログラムです。

OpenFrameが提供するIKJEFT01は、バッチ・アプリケーション(TSOスクリプトのPROGRAMオプションに定義されたプログラム)を実行するためのデータベース接続機能のみサポートしており、DB2システム・コマンドは使用できません。

バッチ・アプリケーションをコンパイルする方法については、OpenFrame『マイグレーションガイド』を参照してください。

8.1. DDの設定

以下は、DDの設定項目です。

項目 説明

SYSTSPRT DD

IKJEFT01の処理結果またはエラーメッセージが出力されます。ただし、SYSTSPRT DDが準備される前に発生するエラーメッセージはSYSOUT DDに出力されます。

SYSTSIN DD

IKJEFT01の入力スクリプトを指定します。

8.2. PARM機能

IKJEFT01ユーティリティは、PARM文を使用してTSOコマンドを実行できます。PARM文に実行するTSOコマンドを入力し、単一引用符で囲む必要があります。また、実行させるTSOコマンドのオペランドは単一引用符を2重にして囲んで指定します。入力できるTSOコマンドの総文字数は100文字までに制限されています。

以下は、PARM文を使用してCLISTを実行し、必要なパラメータを渡すJCLの例です。

//PARMEXAM JOB
//STEP010  EXEC PGM=IKJEFT01,
//         PARM='EXEC ''SYS1.TSOLIB(CLIST01)'' ''FIRST'' ''SECOND'''
//SYSTSIN  DD DUMMY
//SYSTSPRT DD DUMMY
//SYSOUT   DD SYSOUT=*

以下は、上記の例で実行されるCLISTの例です。

PROC 2 ARG01 ARG02
WRITE &ARG01 MESSAGE
WRITE &ARG02 MESSAGE

以下は、JCLの実行結果のうち、SYSOUTに出力された内容です。

FIRST MESSAGE
SECOND MESSAGE

8.3. コマンドの設定

IKJEFT01のコマンドについて説明します。

DSN

以下は、DSNコマンドの構文です。

DSN [SYSTEM(DSN|subsystem-name)]
    [RETRY(0|integer)]
パラメータ 説明

SYSTEM

データベースのサブシステム名を指定します。

指定しない場合は、デフォルトのSYSTEM(DSN)を使用します。 指定されたデータベース・サブシステム名は、環境設定のikjeft01サブジェクトのSYSTEM:{system}セクションのサブキーのVALUE項目が設定されている必要があります。 詳細については、OpenFrame Batch『環境設定ガイド』を参照してください。

RETRY

データベース・サブシステムの接続試行回数を指定します。

30秒ごとに接続が試行されます。指定しない場合のデフォルトとしてRETRY(0)が設定され、最大120回接続を試行します。

TSOコマンドのDSNは、新しいDSN(DB2 Command Processor)セッションを開始します。次のようなDSNサブコマンドが存在します。

コマンド 説明

RUN

ユーザー・アプリケーションを実行します。

END

データベース接続を終了し、TSOに戻ります。

現在、IKJEFT01の以下のDSNサブコマンドは、実際には機能しませんが、 エラーが発生するのを防ぐためにサポートしています。

コマンド 説明

ABEND

DSNセッションを終了してABENDコードを返します。

BIND

アプリケーション・パッケージまたはプランを作成します。

DCLGEN

SQL文と定義テーブルを作成します。

FREE

アプリケーション・パッケージまたはプランを削除します。

REBIND

パッケージまたはプランを再作成します。

SPUFI

SQLファイル入力を使用してSQL処理プログラムを実行します。

DSNセッションが接続されている間は、データベース・コマンドとコメントを入力することができます。データベース・コマンドはハイフン(-)で始まり、コメントはアスタリスク(*)で始まります。

以下は、DSNセッションの接続中にOpenFrameで使用できるデータベース・コマンドです。

コマンド 説明

DISPLAY

データベースの状態情報を出力します。

START

指定されたデータベースを使用します。

STOP

指定されたデータベースを使用しません。

OpenFrameでは、メインフレームで頻繁に使用されるいくつかのデータベース・コマンドをサポートしています。ただし、実際には機能せず、エラーが発生するのを防ぐためにサポートしています。

RUN

DSNサブコマンドのRUNは、SQL文を含めるアプリケーションを実行します。

以下は、RUNサブコマンドの構文です。

RUN PROGRAM(program-name)
    [PLAN(plan-name)]
    [LIBRARY(library-name)]
    [PARMS(parameter-string)]

RUN [LIBRARY(library-name)]
    [PARMS(parameter-string)]
項目 説明

PROGRAM

実行するプログラム名を指定します。

PLAN

IKJEFT01では、実際には機能せず、エラーが発生するのを防ぐためにサポートしています。

LIBRARY

アプリケーションが含まれているPDS名を指定します。(略語: LIB)

PARMS

アプリケーションに渡されるパラメータ・リストを指定します。(略語: PARM)

END

DSNサブコマンドのENDは、DSNセッションを終了してTSOに戻ります。

以下は、ENDサブコマンドの構文です。

END

8.4. 使用例

以下は、DSNセッションの例です。MYDBシステムへの接続に失敗した場合、30秒ごとに最大5回まで接続を試みます。

DSN SYSTEM (MYDB) RETRY (5)

以下は、DSNシステムにアクセスしてTEST.RUNLIB.LOADライブラリにあるCOBTEST1プログラムを実行する例です。

DSN SYSTEM (DSN)
RUN PROGRAM (COBTEST1) LIB ('TEST.RUNLIB.LOAD')

以下は、DSNシステムに接続してTEST.RUNLIB.LOADライブラリにあるCOBTEST2プログラムを実行し、COBTEST2プログラムのパラメータとして’1234567890’を渡す例です。

DSN SYSTEM (DSN)
RUN PROGRAM (COBTEST2) PLAN (COBTEST2) -
     LIB ('TEST.RUNLIB.LOAD') PARMS ('1234567890')

8.5. 環境設定

データベースのシステム名とデータベース接続に必要な情報は、OpenFrame環境設定のikjeft01サブジェクトに設定します。

  1. ikjeft01サブジェクトの設定項目については、OpenFrame Batch『環境設定ガイド』を参照してください。

  2. 類似したユーティリティ・プログラムには、PGMRTS00(Runtime Environment Control Program)とDFSRRC00(HiDB Region Control Program)があります。

8.6. 注意事項

IKJEFT01は、SYSTSIN DDにTSOスクリプトを指定する必要があり、TSOスクリプトのPROGRAMオプションに定義されたプログラムは共有オブジェクト・タイプである必要があります。現在は、シェル・スクリプトと実行可能なオブジェクトはサポートされません。

DSNコマンドとDSNサブコマンドを使用する際は、次の解析規則が適用されます。

  • 1つのコマンドを複数行にまたがって記述する場合は、各行の最後にハイフン(-)を使用します。

以下は、複数行にまたがって記述したDSNサブコマンドの例です。

RUN PROGRAM(TECA251) -
PLAN(TECA251) -
LIB('MI.PROG.CLINK') -
PARM('2')

8.6.1. 戻りコード

以下は、IKJEFT01ユーティリティの戻りコードです。

  • 正常に実行された場合

    バッチ・アプリケーションからの戻りコードを返します。

  • エラーが発生した場合

    SYSPRINT DDにエラーメッセージを出力し、該当するエラーコードを返します。ただし、SYSTSPRT DDが準備される前に発生したエラーメッセージはSYSOUT DDに出力します。

    コード 説明

    12

    回復不能エラーです。次のようなエラーがあります。

    • データセット認証に失敗した場合

    • SYSTSIN DDが提供されていない場合

    • SYSTSPRT DDが提供されていない場合

    • SYSTSIN DDのファイルが見つからない場合

    • サポートされないSYSTSIN DDのバイナリ形式である場合

    • SYSTSIN DDスクリプトの解析エラーが発生した場合

    • 不適切なTSOコマンドが使用された場合

    • RUNコマンドにPROGRAMが記述されていない場合

    • RUNコマンドに記述されたPROGRAMが見つからない場合

    • 実行させるアプリケーションが見つからない場合

    • サポートされないアプリケーション・バイナリ形式である場合

    • データベース接続に失敗した場合

    • 動的メモリーをロード(dlopen)できなかった場合

    • エントリ・ポイントの検索(dlsym)に失敗した場合

    16

    システム・エラー(システム障害)です。次のようなエラーがあります。

    • OpenFrameシステム・ライブラリの初期化に失敗した場合

    • SYSTSPRT DDをオープンできなかった場合

    • SYSTSIN DDのバイナリ形式をチェックする際、エラーが発生した場合

    • SYSTSIN DDをオープンできなかった場合

    • 一時ファイルが作成できない場合

    • SYSTSIN DDの読み込みエラーが発生した場合

    • アプリケーションのバイナリ形式をチェックする際、エラーが発生した場合

    • データベース・システム設定の読み込みエラーが発生した場合

    • プロセス分岐(fork)に失敗した場合

    • 入出力リダイレクトに失敗した場合

9. ISRSUPC

ISRSUPCは、2つのデータセットを比較するか、1つのデータセット内の特定の文字列を検索するユーティリティ・プログラムです。PARMに設定された処理オプションとSYSINに記述された処理ステートメントに従って多様な機能を提供します。

9.1. DDの設定

以下は、DDの設定項目です。

項目 説明

OLDDD DD

比較する入力データセットを指定します。このDDは、1つのデータセット内の特定の文字列を検索する際には使用されません。

NEWDD DD

比較する入力データセットを指定します。

OUTDD DD

ISRSUPCの出力を保存します。(OUTDDにはSYSOUTまたは非VSAMデータセットのみサポートします)

SYSIN DD

ISRSUPCに必要なコマンドを指定します。

SYSPRINT DD または

SYSOUT DD

ISRSUPCを実行中に発生したエラーメッセージが出力されます。

9.2. PARMに指定するオプション

以下は、JCLのEXEC文のPARMに使用できるオプションです。

項目 説明

ANYC

2つのデータセットを比較するか、あるいは1つのデータセット内の文字列を検索する際、アルファベットの大文字と小文字を区別しません。

DELTAまたは

DELTAL

比較結果が異なる行のみOUTDDに出力します。現在、DELTAまたはDELTALのみサポートしています。

LINECMP

データセットを行単位で比較します。現在、LINECMPのみサポートしています。

SRCHCMP

1つのデータセット内の特定の文字列を検索します。

9.3. コマンドの設定

SYSIN DDを介して設定できるISRSUPCのコマンドについて説明します。

CMPCOLM

比較するデータセットの行の列を指定します。

以下は、CMPCOLMコマンドの構文です。

CMPCOLM start-colm[:stop-colm][,...]
項目 説明

start-colm

比較する列範囲の開始位置を指定します。

stop-colm

比較する列範囲の終了位置を指定します。指定しない場合は、start-colmの1文字が比較対象となります。

SRCHFORまたはSRCHFORC

1つのデータセット内の特定の文字列を検索する際、検索文字列を指定して検索範囲を指定することができます。ただし、SRCHFORCは、前のSRCHFORまたはSRCOFORCによって文字列が検索された行でのみ指定の文字列を検索します。

以下は、SRCHFORまたはSRCHFORCコマンドの構文です。

SRCHFOR 'string'[,srch-type][,start-colm[:stop-colm]]
SRCHFORC 'string'[,srch-type][,start-colm[:stop-colm]]
項目 説明

string

検索する文字列を指定します。

srch-type

検索する文字列のタイプを指定します。srch-typeは、P、S、Wのいずれかを選択できます。

  • P : 接頭部を指定します。指定された文字列と最初の部分が一致するワードが検索されます。

    (例: 「test」を検索すると、「test1」、「test-type」、「test」がすべて検索されます)

  • S : 接頭部を指定します。指定された文字列と最後の部分が一致するワードが検索されます。

    (例: 「test」を検索すると、「pretest」、「sample-test」、「test」がすべて検索されます)

  • W : ワードを指定します。指定された文字列と一致するワードが検索されます。

    (例: 「test」を検索すると「test」のみ検索されます)

start-colm

検索範囲の開始位置を指定します。

stop-colm

検索範囲の終了位置を指定します。

指定された文字列の1文字だけでもstop-colm内に存在していれば検索されます。たとえば、stop-colmが70であり、検索する文字列「test」のtが70列にあれば、これも検索されます。

9.4. 使用例

以下は、OPENFRAME.ISRSUPC.OLDデータセットとOPENFRAME.ISRSUPC.NEWデータセットを比較する例です。アルファベットの大文字と小文字を区別せず、各行の3~40列、および75列が同じであるかを比較します。

//JOB01    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//DIFF     EXEC PGM=ISRSUPC,PARM='DELTA,LINECMP,ANYC'
//OLDDD    DD DSN=OFRAME.ISRSUPC.OLD,DISP=SHR
//NEWDD    DD DSN=OFRAME.ISRSUPC.NEW,DISP=SHR
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//OUTDD    DD SYSOUT=A
//SYSIN    DD *
 CMPCOLM 3:40,75
/*

以下は、OPENFRAME.ISRSUPC.NEWデータセットの1~72列の範囲内で「test」という文字列があるかどうかを検索する例です。アルファベットの大文字と小文字を区別しません。

//JOB02    JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//SRCH     EXEC PGM=ISRSUPC,PARM='SRCHCMP,ANYC'
//NEWDD    DD DSN=OFRAME.ISRSUPC.NEW,DISP=SHR
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//OUTDD    DD SYSOUT=A
//SYSIN    DD *
 SRCHFOR 'test',1:72
/*

9.5. 戻りコード

以下は、ISRSUPCユーティリティの戻りコードです。

  • 正常に実行された場合

    コード 説明

    0

    データセットの比較時に異なる内容がなく、指定の文字列が検索されなかったことを意味します。

    1

    データセットの比較時に異なる内容があり、指定の文字列が検索されたことを意味します。

  • エラーが発生した場合

    SYSPRINT DDまたはSYSOUT DDにエラーメッセージを出力します。エラーが発生したとき、エラーメッセージを確認するには、JCLに該当のDDを設定する必要があります。

    以下は、ISRSUPCで発生し得るエラーコードです。

    コード 説明

    8

    OLDDDデータセットの処理時にエラーが発生した場合です。

    10

    SYSIN DDコマンドの構文エラーが発生した場合です。

    16

    NEWDDデータセットの処理時にエラーが発生した場合です。

    24

    OUTDDデータセットの処理時にエラーが発生した場合です。

    32

    メモリ不足などのメモリ・エラーです。

10. PGMRTS00

PGMRTS00は、JCLを使用して共有オブジェクトとしてコンパイルされたバッチ・アプリケーションを実行する際、OpenFrame/BatchのJCLランナーによって間接的に実行される実行環境制御ユーティリティ・プログラムです。

JCL EXEC文のPGMパラメータ値で共有オブジェクトとしてコンパイルされたバッチ・アプリケーションを指定した場合、JCLランナーがPGMRTS00を優先的に実行させます。実行されたPGMRTS00は、共有オブジェクトとしてコンパイルされたバッチ・アプリケーションをメモリに動的にロードし、エントリ・ポイントを検索して呼び出した後、アプリケーションを実行させます。

以下は、PGMRTS00の動作フローです。

figure 5 1
PGMRTS00の動作フロー
  1. JCLランナーが実行されるアプリケーションのバイナリ形式をチェックします。

  2. アプリケーショのバイナリ形式が共有オブジェクトである場合、JCLランナーはPGMRTS00を実行してアプリケーションを動的に実行します。

  3. アプリケーショのバイナリ形式が共有オブジェクトでない場合、JCLランナーはPGMRTS00を介さずにアプリケーションを実行します。

10.1. DDの設定

PGMRTS00が単独で使用するDD設定はありません。最終的に実行されるバッチ・アプリケーションで必要なDDが自動設定されます。

10.2. コマンドの設定

PGMRTS00で別途設定するコマンドはありません。

10.3. 使用例

PGMRTS00をJCLに直接記述して使用することはありません。

10.4. 環境設定

JCLランナーのPGMRTS00ユーティリティ・プログラムの情報は、tjclrunサブジェクトで設定できます。共有オブジェクトとして作成されたバッチ・アプリケーションをJCLで直接実行できるようにするには、OpenFrame環境設定のtjclrunサブジェクトのPGMセクションのUSE_PGMRTS00キーのVALUE項目をYESに設定する必要があります。

  1. tjclrunサブジェクトの設定項目については、OpenFrame Batch『環境設定ガイド』を参照してください。

  2. 類似したユーティリティ・プログラムには、IKJEFT01(TSO Terminal Monitoring Program)とDFSRRC00(HiDB Region Control Program)があります。

10.5. 戻りコード

以下は、PGMRTS00ユーティリティの戻りコードです。

  • 正常に実行された場合

    バッチ・アプリケーションからの戻りコードを返します。

  • エラーが発生した場合

    SYSPRINT DDにエラーメッセージを出力し、該当するエラーコードを返します。

    コード 説明

    12

    回復不能エラーです。次のようなエラーがあります。

    • データセット認証の準備に失敗した場合

    • プログラム・パラメータ数の指定エラー

    • 実行するアプリケーションが見つからなかった場合

    • サポートしていないアプリケーション・バイナリ形式

    • 動的なメモリ・ロード(dlopen)に失敗した場合

    • エントリ・ポイントの検索(dlsym)に失敗した場合

    16

    システム・エラーです。次のようなエラーがあります。

    • OpenFrameシステム・ライブラリの初期化に失敗した場合

    • アプリケーション・バイナリ形式のチェックエラー

    • プロセスの分岐(fork)に失敗した場合

    • 入出力リダイレクトに失敗した場合