表操作機能は,同じ形式のデータが複数個ある場合,それらをまとめて一つの表として扱い,以下の操作を行うことができる.
・ |
表の定義 |
・ |
表要素の参照 |
・ |
表の検索 |
表は,データ記述項にOCCURS句を書くことにより定義する.
OCCURS句を指定した項目(従属する項目も含む)を表要素と呼び,その項目を繰り返し定義できる.表の大きさは,表要素の繰返し回数で決まり,この繰返し回数を反復回数と呼ぶ.反復回数は,OCCURS句で指定する.なお,OCCURS句が書かれた項目の大きさは32767バイト以内でなければならない.
表は,固定の大きさで定義でき,その次元数は各OSにより異なるが普通、3次元までは定義できる.
表の定義例
表要素(以降,従属する項目も含む)は,その出現番号を指定して一意に参照できる.出現番号の指定は,指標名,データ名又は整数を使用して行う.
このように,出現番号により表要素を一意に参照することを添字付けと呼ぶ.
指標名は,OCCURS句のINDEXED BY指定で定義する.指標名の領域は,コンパイラにより自動的に生成される.ただし,初期値は不定であり,使用前に必ず値を設定しなければならない.
指標名への値の設定は,SET文を実行して行う.SET文は,値の設定と,現在の値に対する加減算を行うことができる.
表要素を指標名で添字付けする場合,指標名は,他の表を定義したときの名前であってはならない.指標名の値は,SET文を実行して,指標データ項目に退避することができる.指標データ項目は,USAGE句を書き,INDEXを指定して定義する.
指標名及び指標データ項目の値は,比較条件で検査することもできる.
次に,指標名により添字付けの例を示す.
データ名による添字付けの場合,添字の値は,表中の出現番号を示す.
(a) |
表中の項目を参照する場合,整数による添字付け,指標名による添字付け,2進項目による添字付け,内部10進項目による添字付け,外部10進項目による添字付けの順で,効率が良い. |
(b) |
添字付けで一意名を使用する場合は,4桁以下の符号付2進項目を使用した方が効率が良い. |
表の検索は,SEARCH文を実行して行う.SEARCH文を使用する場合,指標名の定義が必須である.
SEARCH文の検索方法は,表がキーを持つか否かで異なり,そのキーの値は,大小順序に従って昇順又は降順に並んでいなければならない.
表がキーを持たない場合は,ALL指定のないSEARCH文(以降,単にSEARCH文と略記する)を使用する.キーを持つ場合,ALL指定のSEARCH文(以降,SEARCH ALL文と略記する)を使用する.
表の検索は,その表を定義した指標名の値で示す表要素の出現番号から始まり,条件を満足するまで,表の最後まで連続して行われる.
指標名には,検索中の表要素を参照するために,その都度出現番号を示す値が設定される.このとき,他の指標名又はデータ項目を指定して,その値も1ずつ加算することもできる.指標名は,他の表で定義した名前でもよい.
次に,SEARCH文の使用例を示す.
表の検索は,最初の表要素から始まり,条件を満足するまで,表の最後まで連続して行われる.
表要素は,キーを持たなくてはならない.キーは,表要素自身でもよいし,それに従属する項目でもよい.
キーはOCCURS句のASCENDING KEY指定又はDESCENDING KEY指定で定義する.条件の判定は,それらのキーの値をもとに,最初に定義したキーから順番に比較しなければならない.このとき,定義したキーをすべて使用する必要はない.比較は,等しいか否かで行わなければならない.大小関係は判定できない.
以下に,SEARCH ALL文の使用例を示す.
データ記述項に,DEPENDING ON指定を持つOCCURS句を記述することにより,表の反復回数を決めることができる.
集団項目に従属する項目の中に,DEPENDING ON指定を持つOCCURS句が記述されている項目(可変反復データ項目)がある場合,この集団項目の大きさは可変となる.このような項目を可変長項目と呼ぶ.
また,レコード記述中に可変反復データ項目を含む場合,そのレコード領域の長さは可変となる.これは,ファイル記述中のレコード領域だけでなく,データ部のすべてのレコード領域に対していえることである.
可変長項目の項目長は,DEPENDING ON指定の目的語(DEPENDING ON指定に記述されたデータ項目)の値によって決まる.
以下に,可変長項目の記述例を示す.
この例では,可変長項目はD000とD003である.D031の値が8のとき,D003の大きさは68バイト(4+(3+1*5)*8),D000の大きさは89バイト(5+6+10+68)となる.
可変長項目の大きさは,それが参照されるときに,従属する項目中のDEPENDING ON指定の目的語の値に従って計算する.
ただし,その項目が受取り側であり,DEPENDING ON指定の目的語がそれに従属している場合は,反復数は最大値が指定されたものとみなす.
(a) |
可変長項目への転記を行う場合,その可変長項目の現在の大きさが送り側の項目より小さい場合,送り側のすべてのデータを受け取ることができない.もし,送り側のすべてのデータを受け取る必要がある場合は,DEPENDING
ON指定の目的語に必要な値を設定し,領域の大きさを計算し直した後に転記を行わなければならない. |
(b) |
DEPENDING ON指定の目的語にゼロを設定すると,そのDEPENDING ON指定を含むレコード中に大きさが0バイトの可変長項目や表ができる.また,レコード領域の大きさを0バイトにすることもできる.その後,大きさが0バイトのままこれらの項目名,表及びレコード名を記述した文を実行することは避けた方がよい. |