3.18.8 bjexu_ismutおよびbjexu_ismut64(索引順編成ファイルの作成,削除,索引順編成ファイルと順編成ファイルの複写,変換および併合)
(1) 機能
索引順編成ファイルの作成,削除,索引順編成ファイルおよび順編成ファイルの複写,変換および併合ができる。
(a) ファイルの作成(DEFINE文)
索引順編成ファイルを作成する。
-
可変長索引順編成ファイルを作成する場合
レコード長が100バイト,最小レコード長が10バイト,キー長が8バイトで,キーはレコードの先頭にあり,キーの属性が文字型であるファイルを作成する。
DEFINE ISAM,DD=索引順編成ファイル用dd要素名, ISRECL=(100,10), ISRECFM=V, ISKEY=(8,0,C)
-
固定長索引順編成ファイルを作成する場合
レコード長が100バイト,キー長が4バイトで,キーはレコードの先頭にあり,キーの属性が4バイト整数型であるファイルを作成する。
DEFINE ISAM,DD=索引順編成ファイル用dd要素名, ISRECL=(100), ISRECFM=F, ISKEY=(4,0,L)
(b) 索引順編成ファイルおよび順編成ファイルの複写,変換および併合(REPRO文)
ファイルの複写とは,同じ編成のファイルにデータを入れることである。ファイルの変換とは,編成の異なるファイルにデータを入れることである。また,ファイルの併合とは,2つのファイルを1つのファイルにすることである。REPRO文の機能の共通の内容について説明する。個別の内容については,(c)〜(e)の説明を参照のこと。
入出力ファイルの組み合わせと操作内容を次の表に示す。
入力 |
出力 |
||||
---|---|---|---|---|---|
ファイル編成 |
レコード種別 |
索引順編成ファイル |
順編成ファイル |
||
固定長レコード |
可変長レコード |
固定長レコード |
可変長レコード |
||
索引順編成ファイル |
固定長 レコード |
◎ |
× |
○ |
× |
可変長 レコード |
× |
◎ |
× |
○ |
|
順編成ファイル |
固定長 レコード |
○ |
× |
◎ |
× |
可変長 レコード |
× |
○ |
× |
◎ |
- (凡例)
-
◎:複写と併合ができる。
○:変換と併合ができる。
×:指定できない。
-
注意事項
(1)出力ファイルが索引順編成ファイルの場合は,出力ファイルにデータがないときに複写または変換となる。すでにデータがあるときは併合となる。
(2)出力ファイルが順編成ファイルの場合はデータの有無に関係なく,DD要素でDISP="OLD","NEW"または"RNW"を指定したときに複写または変換となる。このとき,データがあっても削除される。順編成ファイルへ併合するときは,DD要素でDISP="MOD"を指定する必要がある。
(3)レコード長は変換しない。固定長で入力ファイルと出力ファイルのレコード長が異なる場合は解析エラーとなる。
(4)出力ファイルが索引順編成ファイルの場合,入力ファイルの各レコードには出力ファイルで設定されているキーがすべて存在することが必要である。そのため,レコード長が出力ファイルの最小レコード長以上である必要がある。
(5)索引順編成ファイルを索引順編成ファイルに複写した場合,データファイルのレコード格納順は,入力ファイルで指定したキーの昇順になる。副キーを指定する場合はキー番号で指定する。
(6)ファイルの複写,変換および併合の範囲指定では,入力ファイルの読み込みで指定したキーの属性に従った値を指定できる。
(7)キー属性は,文字型(CHARTYPE),2バイト整数型(INTTYPE)または4バイト整数型(LONGTYPE)のどれかを指定できる。文字型のキーは,コード体系では比較されないで,バイナリで比較される。
(8)索引順編成ファイルに併合する場合,出力ファイルに入力レコードと同じ主キー値を持つレコードが存在したとき,既存のレコードを置き換えるかどうかは制御文の指定に従う。置き換えの指定がない場合,重複を許可しないキーで重複があったときはエラーとなり,レコードは出力されない。
(9)併合の場合,追加するレコードは出力ファイルの物理的な最終レコードのあとに入力順で追加される。索引順編成ファイルへの併合で,出力ファイルがデータファイルの削除レコードを再利用する指定の場合,併合後の物理的なレコードの順番は不定となる。順番は,ISAMの仕様に従う。
(10)コマンド実行時はISAMの排他モードでファイルを占有する。ISAMユティリティなどでほかの端末から同じファイルに同時にアクセスできない。ファイルを占有できなかった場合は処理を中止する。
(11)出力ファイルが索引順編成ファイルの場合,主キーがないファイルを指定できない。また,主キーの重複を許可しているファイルを指定できない。
(c) ファイルの複写
索引順編成ファイル中のデータを,同じ編成の索引順編成ファイル用に複写する。または,順編成ファイル中のデータを,同じ編成の順編成ファイル用に複写する。複写範囲も指定できる。
索引順編成ファイルの複写では,複写先ファイルのレコード格納順は複写元ファイルで指定しているキーの順序になる。
-
索引順編成ファイルまたは順編成ファイル全体を複写する場合
REPRO INDD=複写元ファイル用dd要素名,※1 OUTDD=複写先ファイル用dd要素名※1
-
索引順編成ファイルまたは順編成ファイルを部分的に複写する場合
REPRO INDD=複写元ファイル用dd要素名,※1 OUTDD=複写先ファイル用dd要素名,※1 SKIP=複写処理開始前に読み飛ばすレコード数,※2 COUNT=複写処理するレコード数※2
-
索引順編成ファイルを部分的に複写する場合
REPRO INDD=複写元ファイル用dd要素名,※1 OUTDD=複写先ファイル用dd要素名,※1 FROMKEY=複写処理を開始するキーの値,※2 TOKEY=複写処理を終了するキーの値※2
注※1 複写元ファイルと複写先ファイルはファイル編成が同じものを指定する。
- 注※2 複写範囲を指定する。複写範囲を指定するオペランドには,次の表に示すものがある。
-
表3‒49 複写範囲を指定するオペランド 入力ファイル
開始位置の指定
終了位置の指定
索引順編成ファイル
FROMKEY
TOKEY
SKIP
COUNT
順編成ファイル
SKIP
COUNT
- 注
-
-
索引順編成ファイルの場合,複写先のファイルをあらかじめ作成しておく必要がある。
-
レコード単位で複写しているため,複写範囲を指定しない複写であればISAMが提供するユティリティコマンドを使用した方が処理時間を短くできる。
-
(d) ファイルの変換
複写元ファイルのファイル編成を変えて,複写先ファイルに複写する。変換範囲も指定できる。
-
索引順編成ファイル中のデータを,順編成ファイルに変換する。
-
順編成ファイル中のデータを,索引順編成ファイルに変換する。変換後の変換先ファイルのレコード格納順は変換元ファイルと同じ順序になる。
-
変換元ファイル全体を変換する場合
REPRO INDD=変換元ファイル用dd要素名, OUTDD=変換先ファイル用dd要素名
-
変換元ファイルを部分的に変換する場合
REPRO INDD=変換元ファイル用dd要素名, OUTDD=変換先ファイル用dd要素名, SKIP=変換処理開始前に読み飛ばすレコード数,※ COUNT=変換処理するレコード数※
-
索引順編成ファイルを部分変換する場合
REPRO INDD=変換元ファイル用dd要素名, OUTDD=変換先ファイル用dd要素名, FROMKEY=変換処理を開始するキーの値,※ TOKEY=変換処理を終了するキーの値※
- 注※
-
変換範囲を指定する。変換範囲を指定するオペランドには,次のものがある。
表3‒50 変換範囲を指定するオペランド 変換元ファイル
開始位置の指定
終了位置の指定
索引順編成ファイル
FROMKEY
TOKEY
SKIP
COUNT
順編成ファイル
SKIP
COUNT
- 注
-
-
索引順編成ファイルの場合,変換先のファイルをあらかじめ作成しておく必要がある。
-
順編成ファイルを索引順編成ファイルに変換する場合,変換元ファイルのレコード順で出力される。索引順編成ファイルに変換する場合,変換先ファイルに指定できる最大レコード長は65,503バイトである。
-
索引順編成ファイルを順編成ファイルに変換する場合,変換先ファイルに指定できる最大レコード長は65,535バイトである。
-
レコード単位で変換しているため,変換範囲を指定しない変換であればISAMが提供するユティリティコマンドを使用した方が処理時間を短くできる。
-
(e) ファイルの併合
ファイルの併合とは,併合元ファイルと併合先ファイル(併合先ファイルにもレコードが入っている)を合わせて1つのファイルにすることである。併合元ファイルには,索引順編成ファイルおよび順編成ファイルのどちらかを指定できる。
併合元ファイルの併合範囲を指定できる。また,索引順編成ファイルへの併合では,入力レコードと出力先のレコードのキー状態によって併合方法を指定できる。併合方法を指定するオペランドと機能を次の表に示す。
オペランド |
機能 |
---|---|
REPLACE |
同一キーを持ったレコードが入力された場合,レコードを置き換える。 |
NOREPLACE |
同一キーを持ったレコードが入力された場合,処理を中止する。 |
IGNORE |
同一キーを持ったレコードが入力された場合,キーが重複するレコードは出力しないで以降の処理を続行する。 |
-
索引順編成ファイルへの併合
索引順編成ファイルへの併合では,併合元ファイルのレコードのキーと併合先ファイルのレコードのキーを比較する。キーが一致してREPLACEオペランドの指定がある場合は,併合先ファイルのレコードを置き換える。キーが不一致の場合は,併合先ファイルにレコードを挿入または追加する。
REPRO INDD=併合元ファイル用dd要素名, OUTDD=併合先ファイル用dd要素名, REPLACE
-
順編成ファイルへの併合
順編成ファイルへの併合では,併合先ファイルの最終レコードに続けて併合元ファイルのレコードを追加する。
REPRO INDD=併合元ファイル用dd要素名, OUTDD=併合先ファイル用dd要素名
-
併合範囲を指定した併合
ファイルの併合では,併合元ファイルの範囲を指定できる。
REPRO INDD=併合元ファイル用dd要素名, OUTDD=併合先ファイル用dd要素名, SKIP=併合処理開始前に読み飛ばすレコード数,※ COUNT=併合処理するレコード数※
- 注※
-
併合元ファイルの併合範囲を指定する。併合範囲を指定するオペランドには,次のものがある。
表3‒52 併合範囲を指定するオペランド 併合元ファイル
開始位置の指定
終了位置の指定
索引順編成ファイル
FROMKEY
TOKEY
SKIP
COUNT
順編成ファイル
SKIP
COUNT
- 注
-
-
索引順編成ファイルの場合,併合先のファイルをあらかじめ作成しておく必要がある。
-
順編成ファイルに併合する場合,併合先ファイルを定義するDD要素でDISP="MOD"を指定する。
-
順編成ファイルを索引順編成ファイルに併合する場合,併合元ファイルのレコード順で出力される。
-
順編成ファイルに併合する場合,併合先ファイルに指定できる最大レコード長は65,535バイトである。
-
索引順編成ファイルに併合する場合,併合先ファイルに指定できる最大レコード長は65,503バイトである。
-
併合する場合,併合処理中に障害が発生したときに備えて,あらかじめバックアップを取得することを推奨する。併合処理中に障害が発生すると,ファイル操作ユティリティは終了コード8で終了するため,バックアップから回復できる。
-
(f) ファイルの複写と変換の処理時間短縮
入力ファイルをそのまま複写や変換する指定のとき,ISAMのユティリティコマンドを実行して複写や変換の処理時間を短縮できる。
bjexu_ismutおよびbjexu_ismut64は,ISAMファイル中の一部のキー範囲のレコードを複写,変換,併合や順編成ファイルをすでにあるISAMファイルに併合できる。このため,1レコードずつキーをチェックして,条件に合致したレコードを処理する。対して,ISAMユティリティコマンドのiscpyおよびiscpy64やisconvおよびisconv64は,複数レコードをまとめてそのまま複写や変換するため,bjexu_ismutおよびbjexu_ismut64より複写や変換の処理時間が短い。
入力ファイルをそのまま複写や変換する場合の処理時間を短縮したいとき,環境変数BJEX_ISMUT_HISPEED=YESを指定する。この指定があると,bjexu_ismutおよびbjexu_ismut64は,入力ファイルをそのまま複写や変換する指定のとき,ISAMのユティリティコマンドを実行する。次の表に入出力ファイルの組み合わせとISAMユティリティコマンドの使用可否を示す。
入力 |
出力 |
||||
---|---|---|---|---|---|
ファイル編成 |
レコード種別 |
索引順編成ファイル |
順編成ファイル |
||
固定長レコード |
可変長レコード |
固定長レコード |
可変長レコード |
||
索引順編成ファイル |
固定長レコード |
◎ |
− |
○ |
× |
可変長レコード |
− |
◎ |
− |
○ |
|
順編成ファイル |
固定長レコード |
○ |
− |
× |
− |
可変長レコード |
− |
○ |
− |
× |
- (凡例)
-
◎:入力ファイルをそのまま複写するときISAMユティリティコマンド(iscpyおよびiscpy64)を使用できる。
○:入力ファイルをそのまま変換するときISAMユティリティコマンド(isconvおよびisconv64)を使用できる。
×:ISAMユティリティコマンドを使用できない。
−:指定できない組み合わせ
-
共通事項
ファイルの変換や複写のとき,ISAMユティリティコマンドのエラーメッセージは,標準エラー出力に出力される。
-
複写機能
索引順編成ファイルを複写する場合,次のすべての条件を満たすとき,ISAMユティリティコマンド(iscpyおよびiscpy64)を使用する。
-
INDD,OUTDDおよびCOPYDDオペランド以外のオペランドの指定がない。
-
出力先の索引順編成ファイル中のレコード数が0件。
-
-
変換機能
順編成ファイルを索引順編成ファイルに変換(索引順編成ファイル変換機能),または索引順編成ファイルのデータファイルを順編成ファイルに変換(順編成ファイル変換機能)するとき,ISAMユティリティコマンド(isconvおよびisconv64)を使用する。
順編成ファイルを索引順編成ファイルに変換する場合,キーファイルをソートするために,ISAMコマンドでワークファイルを使用する。そのため,ワークファイルを作成するディレクトリをDD要素で指定できる。DD名が"TEMPDIR"であるDD要素でディレクトリを指定する。省略時は,/tmpまたは/usr/tmpを使用する。
次のすべての条件を満たすとき,ISAMユティリティコマンド(isconvおよびisconv64)を使用する。
-
INDD,OUTDDおよびCOPYDDオペランド以外のオペランドの指定がない。
-
入力ファイルが連結されていない。
-
出力先の索引順編成ファイル中のレコード数が0件である。または,出力先が順編成ファイルのとき,DD要素でDISP="MOD"以外を指定しているか,DISP="MOD"指定のときは,ファイルサイズが0バイトである。
-
-
環境変数
環境変数BJEX_ISMUT_HISPEEDの設定値ごとの内容を次の表に示す。
表3‒54 環境変数BJEX_ISMUT_HISPEEDの設定ごとの内容 環境変数BJEX_ISMUT_HISPEEDの設定
内容
YES
ISAMのユティリティコマンドを実行し,ファイルの複写や変換の処理時間を短縮する。
NO
ISAMのユティリティコマンドを実行しない。
レコード単位に複写,変換および併合する。
YESとNO以外,または設定されていない
ISAMのユティリティコマンドを実行しない。
レコード単位に複写,変換および併合する。
(g) ファイルの削除(DELETE文)
索引順編成ファイルを削除する。
-
可変長索引順編成ファイルを削除する場合
索引順編成ファイルのdd要素名を指定する。
DELETE ISAM,DD=索引順編成ファイル用dd要素名
(2) 入出力構成
bjexu_ismutおよびbjexu_ismut64の入出力構成を次の図に示す。
(a) 索引順編成ファイルを作成する場合
-
入力
-
入力ファイル
ファイルの作成のため,入力ファイルはない。
-
制御文(SYSIN)
bjexu_ismutおよびbjexu_ismut64の処理内容を次の制御文で指定する。制御文は,(b)の制御文も含めて指定した順に実行される。
・DEFINE文
-
-
出力
-
出力ファイル
新しく作成するファイルが出力ファイルとなる。
-
メッセージ(SYSPRINT)
bjexu_ismutおよびbjexu_ismut64が出力するメッセージの出力先となる。
-
(b) 索引順編成ファイル,順編成ファイルを複写,変換および併合する場合
-
入力
-
入力ファイル
複写,変換または併合の入力となるファイルとなる。
固定長順編成ファイルとして,ダミーファイルも指定できる。
順編成ファイル(固定長順編成ファイルと可変長順編成ファイル)のときは,PRESTファイルを指定できる。
順編成ファイルの場合は,連結して複数のファイルを指定できる。
PRESTファイルは,連結できない。
-
制御文(SYSIN)
bjexu_ismutおよびbjexu_ismut64の処理内容を次の制御文で指定する。制御文は,(a)の制御文も含めて指定した順に実行される。
・INPFILE文
・OUTFILE文
・REPRO文
-
-
出力
-
出力ファイル
複写,変換または併合先の出力ファイルとなる。出力先ファイルは,指定によっては同じ形式で2つのファイルに出力できる。
ダミーファイルも指定できる。
順編成ファイル(固定長順編成ファイルと可変長順編成ファイル)の場合は,PRESTファイルを指定できる。
-
メッセージ(SYSPRINT)
bjexu_ismutおよびbjexu_ismut64が出力するメッセージの出力先となる。
-
(c) 索引順編成ファイルを削除する場合
-
入力
-
入力ファイル
削除するファイル。
-
制御文(SYSIN)
bjexu_ismutおよびbjexu_ismut64の処理内容を次の制御文で指定する。制御文は,(b)の制御文も含めて指定した順に実行される。
・DELETE文
-
-
出力
-
出力ファイル
ファイルの削除のため,出力ファイルはない。
-
メッセージ(SYSPRINT)
bjexu_ismutおよびbjexu_ismut64が出力するメッセージの出力先となる。
-
(d) 終了コード
bjexu_ismutおよびbjexu_ismut64の終了コードを次の表に示す。
終了コード |
意味 |
---|---|
0 |
正常に処理を終了した。 |
4 |
エラーが発生したが無視して続行した。詳細については,出力されたメッセージを参照のこと。※ |
8 |
コマンド処理中にエラーが発生した。エラーの発生したコマンドの処理を終了し,ジョブステップを終了する。出力処理中にエラーが発生しており,出力ファイルの内容は保証されない。必要であればあらかじめ出力ファイルのバックアップを取っておく必要がある。詳細については,出力されたメッセージを参照のこと。 |
12 |
次のような回復できないエラーが発生したため,コマンド処理を実行しないでジョブステップを終了する。
|
注※ 文法的に正しいが,要求された処理を実行できなかった場合,終了コードは4になる。例えば,DELETE文で指定したファイルが存在しないためにファイルの削除ができなかった場合がある。
(3) ジョブ定義XMLファイル
bjexu_ismutおよびbjexu_ismut64を実行する場合は,次に示すEXEC要素とDD要素の指定が必要である。
(a) EXEC要素
-
ISAMライブラリの32ビット版を使用する場合
EXEC要素のPGMにbjexu_ismutを指定する。
<EXEC PGM="bjexu_ismut" />
-
ISAMライブラリの64ビット版を使用する場合
EXEC要素のPGMにbjexu_ismut64を指定する。
<EXEC PGM="bjexu_ismut64" />
(b) SYSPRINTのDD要素
bjexu_ismutおよびbjexu_ismut64が発行するメッセージの出力先を指定する。DD連結指定はできない。出力先には,SYSOUTデータファイルや恒久ファイルを指定できる。
SYSPRINTが使用できない状態の場合,どこにも経過メッセージは出力されない。メッセージの詳細については,「10. メッセージと終了コード」を参照のこと。
(c) 入力ファイルのDD要素
複写,変換および併合の元となる入力ファイルを指定する。
索引順編成ファイルの場合,ファイル拡張子を除いたファイル名を指定する。また,ジョブ定義XMLファイルに,TYPE="FILE",DISP="OLD"またはDISP="SHR"を指定する。また,第2,第3オペランドでDELETEを指定してはならない。指定したファイル名と一致するファイルがある場合は,ジョブステップ終了時にそのファイルは削除される。指定したファイル名に一致するファイルがない場合は,ジョブステップ終了時に警告メッセージが出力されるが,終了コードには反映されない。
DISP="SHR"を指定すると,ファイルを占有しない指定でオープンする(ISAMのopen関数でISMANULOCKを指定)。このため,DISP="SHR"を指定した複数のジョブで同じファイルを同時に入力できる。
順編成ファイルの場合,複数のファイルを連結して指定できる。このとき,各ファイルの属性は一致させる必要がある。
PRESTファイルは,連結できない。
ファイルの属性が一致しているかどうかはチェックされない。固定長順編成ファイルの場合に,ファイルサイズがレコード長の整数倍でないときはエラーになる。このため,入力ファイルを連結している場合,各ファイルのファイルサイズを確認すること。指定できるDISPオペランドを次の表に示す。
入力ファイル編成 |
DISPオペランド |
||||
---|---|---|---|---|---|
OLD |
NEW |
RNW |
MOD |
SHR |
|
索引順編成ファイル |
○ |
− |
− |
− |
○※ |
順編成ファイル |
○ |
− |
− |
− |
○ |
- (凡例)
-
○:指定できる。
−:指定できない。ただし,指定してもエラーにはならない。
指定に従ってファイルが生成される。
- 注※
-
DD要素でDISP=”SHR”を指定すると,ISAMファイルを占有しない指定でオープンする。
ただし,RENAMEを指定したときは,ファイルを占有する指定でオープンする。
(d) 出力ファイルのDD要素
索引順編成ファイルを作成する場合,新しく作成するファイルの出力先となる出力ファイルを指定する。DD連結指定はできない。
索引順編成ファイルおよび順編成ファイルを操作する場合,複写,変換または併合の出力先となる出力ファイルを指定する。DD連結指定はできない。
順編成ファイルに出力する場合は,出力ファイルのDD要素にディレクトリを指定できる。ディレクトリを指定する場合,入力ファイルと同じ名称のファイルに出力する。すでに入力ファイルと同じ名称のファイルがある場合は,エラーとなる。
索引順編成ファイルに出力する場合,ファイル拡張子を除いたファイル名を指定し,ジョブ定義XMLファイルのDD要素では,TYPE="FILE",DISP="OLD"を指定する。DISP="NEW","RNW"または"MOD"を指定した場合,バッチジョブ実行システムは指定されたパス名に従ってファイルを作成する。しかし,bjexu_ismutおよびbjexu_ismut64からは索引順編成ファイルとして使用できない。また,第2,第3オペランドでDELETEを指定してはならない。指定したファイル名と一致するファイルがある場合は,ジョブステップ終了時にそのファイルは削除される。指定したファイル名に一致するファイルがない場合は,ジョブステップ終了時に警告メッセージが出力されるが,終了コードには反映されない。
バッチジョブ実行システムでは,ジョブ定義XMLファイルに指定することで,索引順編成ファイルを作成できない。複写または変換をする場合,REPRO文を実行する前に,ISAMユティリティやDEFINE文で索引順編成ファイルを作成しておく必要がある。
順編成ファイルに併合する場合は,ジョブ定義XMLファイルのDD要素でDISP="MOD"を指定する。それ以外を指定した場合,複写または変換になり,出力ファイルにあったレコードは,削除される。
COPYDDオペランドを指定することで,複写または変換を行う出力先として2つの異なる出力先を登録できる。この場合,COPYDDオペランドで指定するファイルは,OUTDDオペランドで指定したファイルと同じ形式である必要がある。異なる形式の場合は処理されないでエラーとなる。併合の場合にCOPYDDオペランドを指定したときは,処理しないでエラーとなる。
入力ファイルと出力ファイル(OUTDDオペランドおよびCOPYDDオペランドの指定)には,すべて異なるファイルを指定すること。同じファイルを指定した場合は解析エラーとなる。
出力ファイル編成とDD要素の関係を次の表に示す。
出力ファイル編成 |
DSNオペランド |
DISPオペランド |
|||||
---|---|---|---|---|---|---|---|
ファイル |
ディレクトリ |
OLD |
NEW |
RNW |
MOD |
SHR |
|
索引順編成ファイル |
○ |
× |
○ |
−※ |
−※ |
−※ |
− |
順編成ファイル |
○ |
○ |
○ |
○ |
○ |
○ |
− |
- (凡例)
-
○:指定できる。
×:指定できない。指定するとエラーとなる。
−:指定できない。ただし,指定してもエラーにはならない。
注※ 指定するとファイルが割り当てられるが,ISAMファイルとしては使用できない。
(e) SYSINのDD要素
bjexu_ismutまたはbjexu_ismut64制御文を指定する。または,この制御文が記述されたファイルのパスを指定する。DD連結指定はできない。
(f) 索引順編成ファイルの指定
索引順編成ファイルを使用するバッチジョブ間の排他制御は,バッチジョブ実行システムの排他制御機能を使用する。そのため,バッチジョブで使用する索引順編成ファイルは,ジョブ定義XMLファイルのDD要素のDSNオペランドでファイル拡張子を除いたファイル名を指定し,DISP="OLD"を指定する必要がある。指定したファイル名と同じ名称の索引順編成以外のファイルがある場合,そのファイルも排他制御の対象になる。バッチジョブ実行システムは,索引順編成ファイルを作成または再作成しないため,DISP="NEW",DISP="RNW"およびDISP="MOD"オペランドを指定しないこと。また,第2,第3オペランドにDELETEを指定しないこと。指定したファイル名と一致するファイルがある場合は,ジョブステップ終了時にそのファイルは削除される。指定したファイル名に一致するファイルがない場合は,ジョブステップ終了時に警告メッセージが出力される。ただし,終了コードには影響しない。
bjexu_ismutまたはbjexu_ismut64プログラムでは,同時にISAMの排他制御も使用する。この排他制御によって,索引順編成ファイルを使用する端末からの操作,およびバッチジョブ実行システムの環境以外からのジョブ実行によるファイルの同時アクセスを防止する。
(4) bjexu_ismutおよびbjexu_ismut64制御文
bjexu_ismutおよびbjexu_ismut64制御文と機能を次の表に示す。
制御文名 |
機能 |
---|---|
DEFINE文 |
作成する索引順編成ファイルの形式を指定する。 |
INPFILE文 |
入力ファイルのファイル形式を指定する。 |
OUTFILE文 |
出力ファイルのファイル形式を指定する。 |
REPRO文 |
ファイルの複写,変換または併合の開始を指定する。 |
DELETE文 |
索引順編成ファイルの削除を指定する。 |
SET文 |
終了コードを変更する。 |
DEFINE文,DELETE文およびSET文は,単独または複数で指定できる。
INPFILE文,OUTFILE文,REPRO文は,この順で連続して指定する。INPFILE文とOUTFILE文は,省略できない。INPFILE文,OUTFILE文,REPRO文を1組と考えて,複数組の指定ができる。
DEFINE文,DELETE文およびSET文とINPFILE文,OUTFILE文,REPRO文の組を組み合わせて指定することもできる。
INPFILE文とOUTFILE文で指定できるオペランドの組み合わせと処理内容の対応を次の表に示す。
項番 |
INPFILE文の指定 |
OUTFILE文の指定 |
処理内容 ※ |
---|---|---|---|
1 |
FILEORG=I |
FILEORG=I |
索引順編成ファイルの複写または併合 |
2 |
FILEORG=I |
FILEORG=F |
変換または併合 |
3 |
FILEORG=X |
FILEORG=X |
索引順編成ファイルの複写または併合 |
4 |
FILEORG=X |
FILEORG=V |
変換または併合 |
5 |
FILEORG=F |
FILEORG=I |
変換または併合 |
6 |
FILEORG=F |
FILEORG=F |
複写または併合 |
7 |
FILEORG=V |
FILEORG=X |
変換または併合 |
8 |
FILEORG=V |
FILEORG=V |
複写または併合 |
- (凡例)
-
FILEORGオペランドの指定値の意味を次に示す。
I:固定長索引順編成ファイル
X:可変長索引順編成ファイル
F:固定長順編成ファイル
V:可変長順編成ファイル
- 注※
-
-
入力ファイルのレコードは,出力ファイルに同じ形式で出力される。レコード長の変更はできない。
-
出力ファイルが固定長順編成ファイルの場合,OUTFILE文のRECLENオペランドに入力ファイルと同じレコード長を指定する,またはOUTFILE文のRECLENオペランドを省略する必要がある。
-
出力ファイルが可変長順編成ファイルの場合,OUTFILE文のRECLENオペランドに入力レコード長より大きい値を指定する,またはOUTFILE文のRECLENオペランドを省略する必要がある。
-
出力ファイルが索引順編成ファイルの場合,出力ファイルにデータがないときは複写または変換で,出力ファイルにデータがすでにあるときは併合になる。
-
出力ファイルが順編成ファイルの場合は,データの有無に関係なく,DD要素でDISP="OLD","NEW"または"RNW"を指定すると複写または変換となる(データがあっても削除される)。DD要素でDISP="MOD"を指定し,該当ファイルが存在すると併合となり,最終レコードに続いて出力される。
-
(a) DEFINE文
■ 形式
[記号] △1 DEFINE △1 |
ISAM ,DD=DD名 ,ISKEY=(キー長,キー位置[,{C|I|L}]) ,ISRECFM={F|V} ,ISRECL=(レコード長[,最小レコード長]) |
■ オペランド
- ISAM
-
索引順編成ファイルを作成することを指定する。主キーファイルだけを作成する。副キーファイルは,作成できない。ISKEYオペランド,ISRECFMオペランドおよびISRECLオペランドで定義する情報以外は,次に示す内容で定義される。
表3‒60 ISAMファイルの定義情報と内容 ISAM ファイルの定義情報
内容
障害発生時のデータファイル内容保証
保証されない
主キーのキー順序
昇順となる
主キーの重複キー許可
許可しない
主キーの重複キー順序保証
保証する
主キーの圧縮レベル
圧縮しない
主キーのスパース文字許可
許可しない
- DD=DD名
-
-
DD名 〜<環境変数名>((1〜31文字))
作成するファイルのファイルパス名を定義したDD名を指定する。
-
- ISKEY=(キー長,キー位置[,{C|I|L}])
-
索引順編成ファイルのキー長,相対キー位置およびキー属性を指定する。
なお,キー位置とキー長の合計は,ISRECL属性で指定するレコード長(固定長順編成ファイルの場合)または最小レコード長(可変長順編成ファイルの場合)以下にする必要がある。
-
キー長 〜<整数>((1〜255))
キー属性に応じて,次に示すように指定する。
C(文字型)の場合:1〜255の範囲
I(2バイト整数型)の場合:2
L(4バイト整数型)の場合:4
-
キー位置 〜<整数>((0〜65502))
ISRECFM属性で指定するレコード種別に応じて,次に示すように指定する。
ISRECFM=Fの場合:0〜(ISRECL属性で指定するレコード長−1)の範囲
ISRECFM=Vの場合:0〜(ISRECL属性で指定する最小レコード長−1)の範囲
-
{C|I|L}
キー属性を次に示すどれかのパラメータで指定する。
C:文字型
I:2バイト整数型
L:4バイト整数型
-
- ISRECFM={F|V}
-
索引順編成ファイルを作成する場合のレコード種別を指定する。
-
F
レコード種別が固定長であることを示す。
-
V
レコード種別が可変長であることを示す。
-
- ISRECL=(レコード長[,最小レコード長])
-
索引順編成ファイルを作成する場合に,索引順編成ファイルのレコード長を指定する。
ISRECFM属性にVを指定した場合は,最小レコード長も指定する必要がある。
ISRECFM属性にFを指定した場合は,最小レコード長を指定しないこと。指定しても無効となる。
-
レコード長 〜<整数>((1〜65503))
索引順編成ファイルのレコード長を指定する。
-
最小レコード長 〜<整数>((1〜65503))
索引順編成ファイルの最小レコード長を指定する。なお,最小レコード長≦レコード長にする必要がある。
-
■ 注意事項
-
作成される索引順編成ファイルは,主キーの重複を許可しない。
-
同じ名称の索引順編成ファイルがすでにある場合は,エラーになる。
(b) INPFILE文
■ 形式
[記号] △1 INPFILE △1 |
FILEORG=ファイル形式[,RECLEN=レコード長][,CHKEMPTY] |
■ オペランド
- FILEORG=ファイル形式
-
REPRO文で使用する入力ファイルのファイル形式を指定する。
-
ファイル形式 〜((I|X|F|V))
I:固定長索引順編成ファイルであることを示す。
X:可変長索引順編成ファイルであることを示す。
F:固定長順編成ファイル(COBOLまたはアプリケーションなどで作成したファイル,ファイルサイズがレコード長の整数倍であるバイナリファイル)であることを示す。
V:可変長順編成ファイル(COBOLで作成したファイル)であることを示す。
-
- RECLEN=レコード長
-
入力ファイルのファイル形式に固定長順編成ファイルを指定した場合,レコード長を指定する。
-
レコード長 〜<符号なし整数>((1〜65535))
レコード長を指定する。固定長順編成ファイルを指定した場合は,必ず指定する。その他の形式のときは指定しないこと。指定した場合はエラーとなる。
ファイルサイズがレコード長の整数倍でないときはエラーとなる。
-
- CHKEMPTY
-
入力が可変長順編成ファイルのとき,レコード数が0件のファイルであればエラーにすることを指定する。省略すると,入力ファイルのレコード数が0件であってもエラーにしないで,レコード数が0件の出力ファイルを作成する。
入力ファイルが可変長順編成ファイル以外のときは,指定できない。指定すると,エラーとなる。
■ 注意事項
-
INPFILE文の指定内容とジョブ定義XMLファイルのDD要素で指定したファイルの形式が異なる場合,エラーとなる。
(c) OUTFILE文
■ 形式
[記号] △1 OUTFILE △1 |
FILEORG=ファイル形式[,RECLEN=レコード長][,MINLEN=最小レコード長] |
■ オペランド
- FILEORG=ファイル形式
-
REPRO文で使用する出力ファイルのファイル形式を指定する。
-
ファイル形式〜((I|X|F|V))
I:固定長索引順編成ファイルであることを示す。
X:可変長索引順編成ファイルであることを示す。
F:固定長順編成ファイル(COBOLまたはアプリケーションなどで作成したファイル,ファイルサイズがレコード長の整数倍であるバイナリファイル)であることを示す。
V:可変長順編成ファイル(COBOLで作成したファイル)であることを示す。
-
- RECLEN=レコード長
-
出力ファイルに固定長順編成ファイルまたは可変長順編成ファイルを指定した場合,レコード長を指定する。
-
レコード長 〜<符号なし整数>((1〜65535))
レコード長を指定する。固定長順編成ファイルの場合はレコード長を,可変長順編成ファイルの場合は,最大レコード長を指定する。索引順編成ファイルの場合は指定しないこと。指定した場合はエラーとなる。
- 固定長順編成ファイルの場合
-
次に示すレコード長の出力ファイルとなる。
-
RECLENオペランドの指定値が出力ファイルのレコード長になる。
-
RECLENオペランドを省略すると,INPFILE文のRECLENオペランドの指定値を仮定する。
-
- 可変長順編成ファイルの場合
-
次に示す入力ファイルのファイル形式となる。
-
入力が可変長順編成ファイルのとき
可変長順編成ファイルから新規に作成した可変長順編成ファイルへ複写するときは,ヘッダ情報の内容を複写し,RECLENオペランドを省略すると最大レコード長の内容を引き継ぐ。RECLENオペランドの指定があれば,指定された値を最大レコード長に設定する。既存ファイルの場合は,最大レコード長を変更しない。
-
入力が可変長索引順編成ファイルのとき
可変長索引順編成ファイルから新規に作成した可変長順編成ファイルへ変換するときは,RECLENオペランドを省略すると,最大レコード長として65535を仮定する。RECLENオペランドの指定があれば,指定された値を最大レコード長に設定する。既存ファイルの場合は,最大レコード長を変更しない。
-
-
- MINLEN=最小レコード長
-
出力ファイルに可変長順編成ファイルを指定したとき,最小レコード長を指定する。このオペランドを指定すると,最小レコード長より短いレコードを出力しようとしたときにエラーになるので,キーデータなど必須の情報が含まれていることをチェックできる。
-
最小レコード長 〜<符号なし整数>((1〜65535))
最小レコード長を指定する。固定長順編成ファイルや索引順編成ファイルの場合は指定しないこと。指定した場合はエラーとなる。
-
入力が可変長順編成ファイルのとき
可変長順編成ファイルから新規に作成した可変長順編成ファイルへ複写するときは,ヘッダ情報の内容を複写し,MINLENオペランドを省略すると最小レコード長の内容を引き継ぐ。MINLENの指定があれば,指定された値を最小レコード長に設定する。既存ファイルの場合は,最小レコード長を変更しない。
-
入力が可変長索引順編成ファイルのとき
可変長索引順編成ファイルから新規に作成した可変長順編成ファイルへ変換するときは,MINLENオペランドを省略すると,最小レコード長に1を設定する。MINLENオペランドの指定があれば,指定された値を最小レコード長に設定する。既存ファイルの場合は,最小レコード長を変更しない。
-
出力ファイルの最小レコード長に満たないレコードを入力した場合はエラーとなる。
-
■ 注意事項
-
OUTFILE文の指定内容とジョブ定義XMLファイルのDD要素で指定したファイルの形式が異なる場合,エラーとなる。
-
索引順編成ファイルの場合,主キーを持たないファイルは指定できない。指定するとエラーとなる。
-
主キーの重複を許可しているファイルは指定できない。指定するとエラーとなる。
-
固定長索引順編成ファイルまたは固定長順編成ファイルの場合
固定長索引順編成ファイルまたは固定長順編成ファイルに複写する場合,入力ファイルと出力ファイルは,同じレコード長でなければならない。レコード長が異なるとエラーとなる。
-
可変長索引順編成ファイルまたは可変長順編成ファイルの場合
可変長索引順編成ファイルまたは可変長順編成ファイルに複写する場合,入力ファイルの各レコードのレコード長に従って処理する。
入力ファイルが可変長索引順編成ファイルや可変長順編成ファイルのとき,入力ファイルと出力ファイルの最小レコード長と最大レコード長は,異なっていてもよい。
入力ファイルのレコード長が,出力先ファイルの最小レコード長と最大レコード長の範囲に含まれていない場合は,入力元のレコード長を不正と見なし,エラーとする。
「入力ファイルのレコード長>出力ファイルの最大レコード長」の場合,エラーとなる。
「入力ファイルのレコード長<出力ファイルの最小レコード長」の場合,エラーとなる。
「最小レコード長≦入力≦出力ファイルの最大レコード長」の場合,入力したレコードの長さで出力する。
-
RECLENおよびMINLENオペランドを指定するときは,「レコード長≧最小レコード長」になるように指定する。指定に誤りがあると,エラーとなる。
(d) REPRO文
■ 形式
[記号] △1 REPRO △1 |
INDD=DD名 ,OUTDD=DD名 [,COPYDD=DD名] [,KEY=キー番号] [,REPLACE|NOREPLACE|IGNORE] [,FROMKEY=キー|SKIP=レコード数] [,TOKEY=キー|COUNT=レコード数] |
■ オペランド
- INDD=DD名
-
-
DD名 〜<環境変数名>((1〜31文字))
入力ファイルのファイルパス名を定義したDD名を指定する。
-
- OUTDD=DD名
-
-
DD名 〜<環境変数名>((1〜31文字))
出力ファイルのファイルパス名を定義したDD名を指定する。入力ファイルと同じファイルを指定できない。指定するとエラーとなる。
出力ファイルが順編成ファイルの場合,出力先のディレクトリパス名を定義したDD名を指定できる。この場合,入力ファイルと同名のファイルを作成する。入力ファイルがあるディレクトリは指定できない。指定するとエラーとなる。
-
- COPYDD=DD名
-
-
DD名 〜<環境変数名>((1〜31文字))
同時に2つのファイルに出力する場合,出力ファイルのファイルパス名を定義したDD名を指定する。複写または変換する場合に指定できる。併合の場合に指定するとエラーとなる。また,DISP="MOD"を指定した場合は,出力ファイルの指定に関係なく,エラーとなる。
出力ファイルが順編成ファイルの場合,出力先のディレクトリパス名を定義したDD名を指定できる。入力ファイルと同じ名称のファイルがあるディレクトリは指定できない。指定するとエラーとなる。
OUTDDオペランドとともに指定する。INDDオペランドおよびOUTDDオペランドと異なる出力先を指定すること。同じ出力先を指定するとエラーとなる。
-
- KEY=キー番号
-
-
キー番号 〜<整数><<1>>((1〜99))
入力ファイルが索引順編成ファイルの場合,読み込みに使用するキー番号を指定する。キー番号は,ISAMのユティリティコマンドであるisinfoコマンドで表示されるキーファイル情報に対応する番号で,先頭を1とした通し番号である。省略した場合は1が仮定され,主キーが選択される。
重複を許可するキーを指定した場合,レコードの読み込み順序は,ISAMのときと同じである。詳細については,マニュアル「索引順編成ファイル管理 ISAM」を参照のこと。
キー番号は,ファイル拡張子".Knn"の番号nnとは対応しないことがあるので,注意が必要である。
入力ファイルが順編成ファイルのときに指定すると,エラーとなる。
-
- REPLACE|NOREPLACE|IGNORE
-
索引順編成ファイルへ併合する場合に併合先の主キー定義で比較して,入力レコードと同じキー値の出力レコードが存在したときの扱いを指定する。
重複を許可しない副キーに対して重複したキーのレコードを追加しようとした場合,IGNORE以外を指定したときは,エラーとなり処理を中止する。
-
REPLACE
索引順編成ファイルに併合する場合に,入力レコードの主キーと出力レコードの主キーが一致するときは,出力レコードを置き換える。一致しないときは,出力ファイルへレコードを挿入または追加する。
-
NOREPLACE
索引順編成ファイルに併合する場合に,入力レコードのキーと出力レコードのキーが一致するときは,併合処理を中止する。
-
IGNORE
索引順編成ファイルに併合する場合に,入力レコードのキーと出力レコードのキーが一致するときは,キーが重複するレコードを出力しないで以降の処理を続行する。
主キーが重複する場合または重複を許可しない副キーが重複した場合,キーが重複するレコードを出力しないで処理を続行する。
-
- FROMKEY=キー|SKIP=レコード数
-
入力ファイル中の複写,変換または併合処理の開始位置を指定する。省略すると先頭から処理する。
-
FROMKEY=キー
入力が索引順編成ファイルの場合に指定できる。複写,変換または併合処理を開始するレコードのキーを指定する。指定したキーと一致するレコードがない場合,それより大きい最小キーを持つレコードから処理する。
- キー
-
文字型の場合 〜<引用文字列>((1〜255バイト))
2バイト整数型の場合 〜<整数>((-32768〜32767))
4バイト整数型の場合 〜<整数>((-2147483647〜2147483647))
KEYオペランドで指定したキー番号に対応したレコードのキーを指定する。
キー属性が文字型と整数型の場合に指定できる。ファイルに定義されているキー属性に合わせてキーの値を指定する。指定したキーとキー属性が異なると,エラーとなる。また,読み込みで指定したキー番号の定義が合成キーの場合は,指定できない。指定すると,エラーとなる。
キー属性が文字型の場合,引用文字列で指定する。整数を指定するとエラーとなる。指定した文字列とレコードのキーは上位バイトから比較する。指定した文字列がファイルに定義されているキーの長さより短い場合,指定した文字列を含む最小キーを持つレコードから処理する。指定した文字列がファイルに定義されているキーの長さよりも長いと,エラーとなる。
例 文字型のキーを指定したときの処理対象
オペランドで指定した文字列とファイルのキーは上位バイトから比較する。
・FROMKEY='ABC'を指定 ・ファイルのキー(8バイト) 上位→下位 'ABAAAAAA' ← 処理されない 'ABCAAAAA' ← 処理対象 'ABCBBBBB' ← 処理対象 'ABDAAAAA' ← 処理対象
キー属性が2バイトの整数型の場合は,-32768〜32767の範囲で指定する。範囲外の値を指定すると,エラーとなる。また,引用文字列を指定するとエラーとなる。
キー属性が4バイトの整数型の場合は,-2147483647〜2147483647の範囲で指定する。-2147483647より小さい値を指定すると,-2147483647を仮定する。また,2147483647より大きい値を指定すると,2147483647を仮定する。引用文字列を指定するとエラーとなる。
-
SKIP=レコード数
REPRO文で指定できる,すべての形式の入力ファイルに指定できる。複写,変換または併合処理を開始する前に,入力したレコードの先頭からスキップするレコード数を指定する。なお,複数の入力ファイルを指定した場合は,最初に指定したファイルからスキップする。最初のファイルのレコードがすべてスキップの対象となった場合,二番目に指定したファイルが引き続きスキップの対象となる。
- レコード数 〜<符号なし整数>((0〜2147483647))
-
スキップするレコード数を示す。省略した場合は,すべてのレコードが入力の対象になる。
入力レコードの件数より大きい数を指定した場合は,出力レコードの件数は0件となる。
2147483647より大きい値を指定すると,2147483647を仮定する。
-
- TOKEY=キー|COUNT=レコード数
-
入力ファイル中の複写,変換または併合処理の終了位置を指定する。省略すると最後まで処理する。
開始位置≦終了位置の関係が成り立つように指定する。
-
TOKEY=キー
入力が索引順編成ファイルの場合に指定できる。複写,変換または併合処理を終了するレコードのキーを指定する。指定したキーと一致するレコードがない場合,それより小さい最大キーを持つレコードまで処理をする。
合成キーは,指定できない。
- キー
-
文字型の場合 〜<引用文字列>((1〜255バイト))
2バイト整数型の場合 〜<整数>((-32768〜32767))
4バイト整数型の場合 〜<整数>((-2147483647〜2147483647))
読み込みで指定したキー番号の定義に従ったキーの値を示す。
キー属性が文字型と整数型の場合に指定できる。ファイルに定義されているキー属性に合わせてキーの値を指定する。指定したキーとキー属性が異なると,エラーとなる。また,読み込みで指定したキー番号の定義が合成キーのときは,指定できない。指定すると,エラーとなる。
キー属性が文字型の場合,引用文字列で指定する。整数を指定するとエラーとなる。指定した文字列とレコードのキーは上位バイトから比較する。指定した文字列が,定義されているキーの長さより短いときは,指定した文字列を含む最大キーを持つレコードまで処理する。指定した文字列がファイルに定義されているキーの長さよりも長いと,エラーとなる。
例 文字型のキーを指定したときの処理対象
オペランドで指定した文字列とファイルのキーは上位バイトから比較する。
・TOKEY='ABC'を指定 ・ファイルのキー(8バイト) 上位→下位 'ABAAAAAA' ← 処理対象 'ABCAAAAA' ← 処理対象 'ABCBBBBB' ← 処理対象 'ABDAAAAA' ← 処理されない
キー属性が2バイトの整数型のときは,-32768〜32767の範囲で指定する。範囲外の値を指定すると,エラーとなる。また,引用文字列を指定するとエラーとなる。
キー属性が4バイトの整数型の場合は,-2147483647〜2147483647の範囲で指定する。-2147483647より小さい値を指定すると,-2147483647を仮定する。また,2147483647より大きい値を指定すると,2147483647を仮定する。引用文字列を指定するとエラーとなる。
-
COUNT=レコード数
REPRO文で指定できるすべての形式の入力ファイルに指定できる。複写,変換または併合処理を終了するまでのレコード数を指定する。
- レコード数 〜<符号なし整数>((1〜2147483647))
-
複写,変換または併合処理を終了するまでのレコード数を示す。省略した場合は,すべてのレコードが入力の対象になる。入力レコードの件数より大きい数を指定した場合は,すべてのレコードが入力の対象になる。
2147483647より大きい値を指定すると,2147483647を仮定する。
-
■ 注意事項
-
主キーがない索引順編成ファイルにFROMKEYオペランドまたはTOKEYオペランドを指定すると,エラーになる。
-
REPRO文の前には,必ずINPFILE文とOUTFILE文を指定する。INPFILE文,OUTFILE文,REPRO文の順で指定する。この組み合わせのREPRO文を複数指定できる。制御文は,指定した順に実行される。
-
FROMKEYオペランドとTOKEYオペランドは,昇順に値を指定する必要がある。入力ファイルのキー要素が昇順型のときに有効で,入力ファイルのキー要素が降順型のときはエラーとなる。
-
REPLACEオペランド,NOREPLACEオペランドおよびIGNOREオペランドは,入力ファイルが索引順編成ファイルの場合に有効である。順編成ファイルの場合は,指定してもエラーにならないが無効である。
(e) DELETE文
■ 形式
[記号] △1 DELETE △1 |
ISAM,DD=DD名 |
■ オペランド
- ISAM
-
索引順編成ファイルを削除することを指定する。
削除対象のファイルが存在しないときはエラーになるが,処理を続行する。
- DD=DD名
-
-
DD名 〜<環境変数名>((1〜31文字))
削除するファイルのファイルパス名を定義したDD名を指定する。
-
■ 注意事項
-
削除対象ファイルがほかのプログラムやプロセスでオープンされている場合は,エラーとなる。
(f) SET文
■ 形式
[記号] △1 SET △1 |
[MAXCC | LASTCC]=終了コード |
制御文で指定した機能の実行時の終了コードを変更するときに指定する。ただし,制御文で文法解析エラー発生時には,終了コードを変更することはできない。
直前の制御文の実行時にエラーがあっても,後続の制御文を実行したいときに指定する。例えば,直前の制御文で終了コード12になっても,終了コードを0に変更すると後続の制御文を実行できる。
■ オペランド
[MAXCC | LASTCC]=終了コード
-
MAXCC
現在まで実行した制御文の終了コードのうち最大の値を変更するときに指定する。
-
LASTCC
直前に実行した制御文の終了コードの値を変更するときに指定する。
-
終了コード
終了コード0,4,8または12を指定する。
(5) 使用例
(a) ファイルの複写
索引順編成ファイルを部分的に複写する例を次に示す。
<例1>複写元の索引順編成ファイルから先頭の5レコードをスキップし,そこから100レコード分を新規作成ファイルに複写する。また,複写先を2か所にする。
なお,索引順編成ファイルは使用するキーによって入力するレコードの順序が異なる。次の図に,使用するキーの順に入力するレコードの配置のイメージを示す。物理的なレコードの位置は示していないことに注意すること。
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="SAMPLE1" > <STEP NAME="STEP0001" > <EXEC PGM="bjexu_ismut" /> :(1) <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="OLD" /> :(2) <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> :(3) <DD NAME="SYSUT3" TYPE="FILE" DSN="file3" DISP="OLD" /> :(4) <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! DEFINE ISAM, :(5) DD=SYSUT2, :(6) ISRECL=(100), :(7) ISRECFM=F, :(8) ISKEY=(5,0,C) :(9) DEFINE ISAM, :(10) DD=SYSUT3, :(11) ISRECL=(100), :(12) ISRECFM=F, :(13) ISKEY=(5,0,C) :(14) INPFILE FILEORG=I :(15) OUTFILE FILEORG=I :(16) REPRO KEY=1, :(17) INDD=SYSUT1, :(18) OUTDD=SYSUT2, :(19) COPYDD=SYSUT3, :(20) SKIP=5, :(21) COUNT=100 :(22) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)ISAMライブラリの32ビット版のbjexu_ismutプログラムを指定する。
(2)入力ファイルを定義する。
(3)新たに作成する索引順編成ファイルを定義する。このファイルを出力ファイルとして使用する。
(4)新たに作成する索引順編成ファイルを定義する。もう1つの出力ファイルとして使用する。
(5)DEFINE文で索引順編成ファイルを作成する。
(6)DDオペランドに,新たに作成する索引順編成ファイルのファイルパス名を定義したDD名を指定する。
(7)ISRECLオペランドにレコード長を指定する。
(8)ISRECFMオペランドに作成する索引順編成ファイルのレコード種別を指定する。ISRECFM=Fは,固定長であることを示す。
(9)ISKEYオペランドに主キーのキー長,相対キー位置およびキー属性を指定する。ISKEY=(5,0,C)は,キー長が5バイト,相対キー位置が0,キー属性が文字型であることを示す。
(10)DEFINE文で索引順編成ファイルを作成する。
(11)DDオペランドに,作成する索引順編成ファイルのファイルパス名を定義したDD名を指定する。
(12)ISRECLオペランドにレコード長を指定する。
(13)ISRECFMオペランドに作成する索引順編成ファイルのレコード種別を指定する。ISRECFM=Fは,固定長であることを示す。
(14)ISKEYオペランドにキー長,相対キー位置およびキー属性を指定する。ISKEY=(5,0,C)は,キー長が5バイト,相対キー位置が0,キー属性が文字型であることを示す。
(15)入力ファイル形式を指定する。FILEORG=Iは固定長索引順編成ファイルであることを示す。
(16)出力ファイル形式を指定する。FILEORG=Iは固定長索引順編成ファイルであることを示す。
(17)REPRO文でファイルを複写する。入力ファイルが索引順編成ファイルの場合,KEYオペランドに入力ファイルで使用するキーを指定する。KEY=1は主キーファイル(ファイル拡張子".K01")を使用することを示す。このファイルの主キーは,キー長が2バイト,相対キー位置が0で,キー属性は文字型と定義してある。
(18)INDDオペランドに入力ファイルを定義したDD名を指定する。
(19)OUTDDオペランドに出力ファイルを定義したDD名を指定する。
(20)COPYDDオペランドは,もう1つの出力ファイルを定義したDD名を指定する。
(21)SKIPオペランドに複写元のレコードの先頭からスキップするレコード数を指定する。
(22)COUNTオペランドに複写するレコード数を指定する。
<例2>複写元ファイルで主キーが"2C"から"2F"までのレコードを新規作成ファイルに複写する。
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="SAMPLE2" > <STEP NAME="STEP0001" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="OLD" /> :(1) <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> :(2) <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! DEFINE ISAM, :(3) DD=SYSUT2, :(4) ISRECL=(100), :(5) ISRECFM=F, :(6) ISKEY=(2,0,C) :(7) INPFILE FILEORG=I :(8) OUTFILE FILEORG=I :(9) REPRO KEY=1, :(10) INDD=SYSUT1, :(11) OUTDD=SYSUT2, :(12) FROMKEY='2C', :(13) TOKEY='2F' :(14) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)入力ファイルを定義する。
(2)新たに作成する索引順編成ファイルを定義する。このファイルを出力ファイルとして使用する。
(3)DEFINE文で索引順編成ファイルを作成する。
(4)DDオペランドに,新たに作成する索引順編成ファイルのファイルパス名を定義したDD名を指定する。
(5)ISRECLオペランドにレコード長を指定する。
(6)ISRECFMオペランドに作成する索引順編成ファイルのレコード種別を指定する。ISRECFM=Fは,固定長であることを示す。
(7)ISKEYオペランドに主キーのキー長,相対キー位置およびキー属性を指定する。ISKEY=(2,0,C)は,キー長が2バイト,相対キー位置が0,キー属性が文字型であることを示す。
(8)入力ファイル形式を指定する。FILEORG=Iは固定長索引順編成ファイルであることを示す。
(9)出力ファイル形式を指定する。FILEORG=Iは固定長索引順編成ファイルであることを示す。
(10)REPRO文でファイルを複写する。入力ファイルが索引順編成ファイルの場合,KEYオペランドに入力ファイルで使用するキーを指定する。KEY=1は主キーファイル(ファイル拡張子".K01")を使用することを示す。このファイルの主キーは,キー長が2バイト,相対キー位置が0で,キー属性は文字型と定義してある。
(11)INDDオペランドに入力ファイルを定義したDD名を指定する。
(12)OUTDDオペランドに出力ファイルを定義したDD名を指定する。
(13)FROMKEYオペランドに複写を開始するレコードのキーの値を指定する。
(14)TOKEYオペランドに複写を終了するレコードのキーの値を指定する。
(b) ファイルの併合
索引順編成ファイルの併合の例を次の図に示す。
ファイルの併合は,レコードを複写する点ではファイルの複写と同じだが,併合先の出力ファイルにすでにレコードがある点が異なる。ファイルの併合の例では,次の処理を実施している。
-
併合途中のエラー発生によるファイル破壊に備えて,バックアップを取得する。
-
ファイルの併合を実行する。
-
エラー(リターンコード8)が発生した場合は,バックアップからファイルを回復する。
-
バックアップ用のファイルを削除する。
複写元と併合先のファイルで主キーが重複するレコードがある場合,複写元のレコードに置き換えるには,REPRO文でREPLACEオペランドを指定する。
なお,索引順編成ファイルでは,キーの順に処理され,新たにレコードを追加する場合には,レコード削除後に残る無効レコード(空き領域)を使用することがある。このため,レコードの物理的な位置は不定となる。
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="SAMPLE3" > <STEP NAME="STEP0000" > <EXEC PGM="*" > <![CDATA[! iscpy ${DDN_SYSUT2} ${DDN_SYSUT2B} !]]> :(1) </EXEC> <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> <DD NAME="SYSUT2B" TYPE="FILE" DSN="file2B" DISP="OLD" /> </STEP> <STEP NAME="STEP0001" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="OLD" /> <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! INPFILE FILEORG=I OUTFILE FILEORG=I REPRO INDD=SYSUT1,OUTDD=SYSUT2, :(2) REPLACE :(3) ! ]]> </DD> </STEP> <STEP NAME="STEP0002" > <EXEC COND="8,NE,STEP0001" PGM="*" > :(4) <![CDATA[! iscpy ${DDN_SYSUT2B} ${DDN_SYSUT2} !]]> :(5) </EXEC> <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> <DD NAME="SYSUT2B" TYPE="FILE" DSN="file2B" DISP="OLD" /> </STEP> <STEP NAME="STEP0003" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT2B" TYPE="FILE" DSN="file2B" DISP="OLD" /> <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! DELETE ISAM,DD=SYSUT2B :(6) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)ISAMのユティリティコマンドで,バックアップ用に索引順編成ファイルを複写する。ISAMについての詳細は,マニュアル「索引順編成ファイル管理 ISAM」を参照のこと。
(2)REPRO文を実行する。出力ファイルには既存のレコードがあるため,ファイルの併合を実施する。
(3)REPLACE指定がある場合,同じ主キーのレコードが出力先にあると,そのレコードを置き換える。
(4)先行のbjexu_ismutのジョブステップでリターンコード8のエラーが発生した場合は,ファイル回復のジョブステップを実行する。
(5)ISAMのユティリティコマンドで,バックアップ用の索引順編成ファイルから複写して回復する。
(6)バックアップ用の索引順編成ファイルを削除する。
注 この例では,複写するレコードを指定するオペランドが省略されているため,主キーの順にすべてのレコードが複写される。
(c) ファイルの変換
可変長索引順編成ファイルを可変長順編成ファイルに変換する例を次に示す。
<例1>入力元の可変長索引順編成ファイルからキー順にデータを読み込み,出力先へ書き込んでいる。
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="SAMPLE4" > <STEP NAME="STEP0001" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="OLD" /> <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="NEW" /> <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! INPFILE FILEORG=X :(1) OUTFILE FILEORG=V,RECLEN=300 :(2) REPRO INDD=SYSUT1, :(3) OUTDD=SYSUT2 :(4) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)入力ファイル形式を指定する。FILEORG=Xは可変長索引順編成ファイルであることを示す。
(2)出力ファイル形式を指定する。FILEORG=Vは可変長順編成ファイルであることを示す。RECLENオペランドには最大レコード長を指定する。
(3)REPRO文でファイルの変換および複写を実行する。INDDオペランドに入力ファイルを定義したDD名を指定する。
(4)OUTDDオペランドに出力ファイルを定義したDD名を指定する。出力するレコードは,入力ファイルのレコード長で出力される。
注 この例では,複写するレコードを指定するオペランドが省略されているため,主キーの順にすべてのレコードを変換し,複写する。
順編成ファイルを索引順編成ファイルに変換する例を次に示す。
<例2>ISAMライブラリの64ビット版のbjexu_ismut64プログラムを指定して,入力元の順編成ファイルからデータを読み込み,出力先へ書き込んでいる。
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="SAMPLE5" > <STEP NAME="STEP0001" > <EXEC PGM="bjexu_ismut64" /> :(1) <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="OLD" /> <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! INPFILE FILEORG=F,RECLEN=80 :(2) OUTFILE FILEORG=I :(3) REPRO INDD=SYSUT1, :(4) OUTDD=SYSUT2 :(5) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)ISAMライブラリの64ビット版のbjexu_ismut64プログラムを指定する。
(2)入力ファイル形式を指定する。FILEORG=Fは順編成ファイルであることを示す。RECLEN=80は,レコード長が80バイトであることを示す。
(3)出力ファイル形式を指定する。FILEORG=Iは索引順編成ファイルであることを示す。
(4)REPRO文でファイルの変換を実行する。INDDオペランドに入力ファイルを定義したDD名を指定する。
(5)OUTDDオペランドに出力ファイルを定義したDD名を指定する。出力するレコードは,入力ファイルのレコード長で出力される。
(d) ファイルの削除
索引順編成ファイルを作り直す例を次に示す。
- <例1>
-
既存の索引順編成ファイルを削除した後,同じ索引順編成ファイルを再作成する。
なお,削除対象のファイルがなかった場合,それまでのエラーを無視する。このため,それまでに実行した制御文の終了コードのうち最大の値は0にしておく。
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="SAMPLE6" > <STEP NAME="STEP0001" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="OLD" /> :(1) <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> :(1) <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! DELETE ISAM,DD=SYSUT1 :(2) DELETE ISAM,DD=SYSUT2 :(2) SET MAXCC=0 :(3) DEFINE ISAM, :(4) DD=SYSUT1, ISRECL=(100), ISRECFM=F, ISKEY=(5,0,C) DEFINE ISAM, :(4) DD=SYSUT2, ISRECL=(100), ISRECFM=F, ISKEY=(5,0,C) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)削除する索引順編成ファイルを定義する。
(2)索引順編成ファイルの削除を行う。
(3)現在までに実行した終了コードのうち最大の値を0とし,それまでのエラーを無視する。
(4)索引順編成ファイルを作成する。
- <例2>
-
既存の索引順編成ファイルを削除した後,同じ索引順編成ファイルを再作成する。
なお,再作成するファイルがすでになかった場合,DELETE文のエラーを無視する。このため,直前に実行した制御文の終了コードは0にしておく。
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="SAMPLE7" > <STEP NAME="STEP0001" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="OLD" /> :(1) <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> :(1) <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! DELETE ISAM,DD=SYSUT1 :(2) DELETE ISAM,DD=SYSUT2 :(3) SET LASTCC=0 :(4) DEFINE ISAM, :(5) DD=SYSUT1, ISRECL=(100), ISRECFM=F, ISKEY=(5,0,C) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)削除する索引順編成ファイルを定義する。
(2),(3)索引順編成ファイルの削除を行う。
- (4)直前に実行した(3)の終了コードの値を0にする。
-
それ以前に実行された制御文の終了コードは変更しない。
例2では,(2)の終了コードが4のとき,最大の終了コードは4になる。
(5)索引順編成ファイルを作成する。
(e) 入力の索引順編成ファイルを複数ジョブで共用
JOB0001とJOB0002で,入力の索引順編成ファイルを共用することで,排他/共用ロック確保待ちになることなく同時に実行できるようにする。このため,入力ファイルを指定するDD要素でDISP="SHR"を指定する。
- <JOB:JOB0001>
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="JOB0001" > <STEP NAME="S1" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="SHR" /> :(1) <DD NAME="SYSUT2" TYPE="FILE" DSN="file2" DISP="OLD" /> :(2) <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! INPFILE FILEORG=I :(3) OUTFILE FILEORG=I :(4) REPRO KEY=1, INDD=SYSUT1, :(5) OUTDD=SYSUT2 :(6) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)DD要素SYSUT1でファイルfile1を共用使用するためにDISP="SHR"を指定
(2)DD要素SYSUT2でファイルfile2を排他使用するためにDISP="OLD"を指定
(3)INPFILE文で,入力が索引順編成ファイルであることを指定
(4)OUTFILE文で,出力が索引順編成ファイルであることを指定
(5)INDD文で入力ファイルとしてSYSUT1を指定
(6)OUTDD文で出力ファイルとしてSYSUT2を指定
- <JOB:JOB0002>
<?xml version="1.0" encoding="Shift_JIS" ?> <HitachiBatchJobExec version="1.3" os="unix" > <JOB NAME="JOB0002" > <STEP NAME="S1" > <EXEC PGM="bjexu_ismut" /> <DD NAME="SYSPRINT" TYPE="SYSOUT" SYSOUT="A" /> <DD NAME="SYSUT1" TYPE="FILE" DSN="file1" DISP="SHR" /> :(1) <DD NAME="SYSUT2" TYPE="FILE" DSN="file3" DISP="OLD" /> :(2) <DD NAME="SYSIN" TYPE="DATA" > <![CDATA[ ! INPFILE FILEORG=I :(3) OUTFILE FILEORG=I :(4) REPRO KEY=1, INDD=SYSUT1, :(5) OUTDD=SYSUT2 :(6) ! ]]> </DD> </STEP> </JOB> </HitachiBatchJobExec>
(1)DD要素SYSUT1でファイルfile1を共用使用するためにDISP="SHR"を指定
(2)DD要素SYSUT2でファイルfile3を排他使用するためにDISP="OLD"を指定
(3)INPFILE文で,入力が索引順編成ファイルであることを指定
(4)OUTFILE文で,出力が索引順編成ファイルであることを指定
(5)INDD文で入力ファイルとしてSYSUT1を指定
(6)OUTDD文で出力ファイルとしてSYSUT2を指定