データベース・ファイルの読み取り

1.複合キー -KLIST/KFLD

複合キーの定義
複合キーを定義する場合、「KLIST」命令、「KFLD」命令を使用します。KLIST命令は、複合キー・フィールドを参照する名前を指示するために使用し、KFLD命令は、複合キーを構成するフィールドを支持する為に使用します。KLISTとそれに対応するKFLDは演算仕様書のどこで指定してもかまいません。

1)KLIST命令
  複合キーに名前を付けます。
  「演算項目1」   :複合キーの名前
  「演算命令」    :KLIST
2)KFLD命令
  複合キーを構成する変数を指定します。
  「演算命令」    :KFLD
  「結果のフィールド」:変数名

複合キーのキー・フィールド
KELDはデータベース・ファイルのキー・フィールドの順に従って個別に指定しますが、キー・フィールドの数と必ずしも一致させる必要はありません。
図の例では、データベース・ファイルのキー・フィールドが伝票番号/発生日/ボディ№/ヘッド№で構成されています。この場合、上位のキー・フィールドで複合キーを構成できます。

[データベース・ファイルのキー・フィールド]
伝票番号/発生日/ボディ№/ヘッド№

[可能な複合キー]
①伝票番号/発生日/ボディ№/ヘッド№
②伝票番号/発生日/ボディ№
③伝票番号/発生日
④伝票番号
※属性を合わせます。


2.ポインターのセット -SETLL/SETGT

SETLL命令(Set Lower Limit)
SETLL命令は、キーまたは相対レコード番号の値が「演算項目1」で指定した値と等しいか、より大きい次のレコードの市にポインターをセットします。
ポインターをセットするだけで読み取りは行いません
 「演算項目1」  :探索キー(複合キーでもよい)
 「演算命令」   :SETLL
 「演算項目2」  :ファイル名またはレコード様式名(外部記述ファイルのみ)
 「結果の標識HI」:「演算項目1」で指定した値がファイルの一番大きいキーまたは
           相対レコード番号より大きい場合にオンセットされます。
 「結果の標識LO」:不可
 「結果の標識EQ」:「演算項目1」で指定した値と同じファイルのキーまたは相対
           レコード番号があればオンセットされます。

SETGT命令(Set Greater Than)
SETGT命令は、キーまたは相対レコード番号の値が「演算項目1」で指定した値より大きい次のレコードの位置にセットします。
ポインターをセットするだけで読み取りは行いません。
 「演算項目1」  :探索キー(複合キーでもよい)
 「演算命令」   :SETGT
 「演算項目2」  :ファイル名またはレコード様式名
 「結果の標識HI」:「演算項目1」で指定した値より大きいキーまたは相対レコード番号が
           見つからなかった場合にオンセットされます。
 「結果の標識LO」:不可
 「結果の標識EQ」:不可

POINT

SETLL、SETGTの探索キーとして次の予約語を指定できます。
*LOVAL:最初のレコードが読み取れるようポインターセットされます。
*HIVAL:最後のレコードが読み取れるようポインターセットされます。


3.順次読み取り-READ/READP/READE/READPE

データベース・ファイルの読み取り命令は、順次読み取り直接読み取りの2種類に分けられます。

順次読み取り

レコードの並び順にしたがって順次に読み取る命令です。
全手順ファイル(ファイル仕様書の18桁目に(F)指定)から、現在位置付けられているレコードが読み取られます。
ファイル仕様書の「レコードアドレスの種類」に基づき、到着順アクセス・パスを用いる処理化キー順アクセス・パスを用いる処理かが決まります。
 [レコードアドレスの種類]
 K   :キー順アクセス・パスを用いる処理
 ブランク:到着順アクセス・パスを用いる処理

READ命令
レコードの並び順に従って順次に読み取ります。
READ命令は全手順ファイルから現在位置付けられているレコードを読み取ります。
レコードが読み取れた場合、ポインターは次のレコードに位置付けられます。
「演算命令」   :READ
「演算項目2」  :ファイル名またはレコード様式名
「結果の標識HI」:不可
「結果の標識LO」:読み取りの不成功を示す標識
          レコードの読み取りが不成功の時にオンセットされます。
「結果の標識EQ」:ファイルの終わりを示す標識
          レコードが読み取れるとオフになり、読み取れないとオンセットされます。

READP命令
レコードの並び順の逆順に読み取ります。
READP命令は全手順ファイルから現在位置付けられている前のレコードを読み取ります。
レコードが読み取れた場合、ポインターは1つ前のレコードに位置付けられます。
「演算命令」   :READP
「演算項目2」  :ファイル名またはレコード様式名
 「結果の標識HI」:不可
「結果の標識LO」:読み取りの不成功を示す標識
          レコードの読み取りが不成功の時にオンセットされます。
「結果の標識EQ」:ファイルの始めを示す標識
          レコードが読み取れるとオフになり、ファイルに前のレコードがなくなって
          読み取れない時にオンセットされます。

READE命令
現在のポインター位置から「演算項目1」で指定した探索キーと一致するレコードを順次に読み取ります。
「演算項目1」  探索キー(複合キーでもよい)
「演算命令」   :READE
「演算項目2」  :ファイル名またはレコード様式名
「結果の標識HI」:不可
「結果の標識LO」:読み取りの不成功を示す標識
          レコードの読み取りが不成功の時にオンセットされます。
「結果の標識EQ」:読み取るレコードが無い時オンセットされます。

READPE命令
現在のポインター位置から「演算項目1」で指定した探索キーと一致するレコードを逆順に読み取ります。
「演算項目1」  探索キー(複合キーでもよい)
「演算命令」   :READPE
「演算項目2」  :ファイル名またはレコード様式名
「結果の標識HI」:不可
「結果の標識LO」:読み取りの不成功を示す標識
          レコードの読み取りが不成功の時にオンセットされます。
「結果の標識EQ」:読み取るレコードが無い時オンセットされます。

POINT

組み込み関数
%EOF(ファイルの終わりまたは先頭条件の戻し)
READ/READC/READE/READP/READPE/WRITE
ファイルまたはサブファイルに対して実行された読み取りや書き出しができれば'0'を、できなければ'1'を戻します。
  [演算命令]    :命令コード
  [演算項目2]   :%EOF
            :NOT %EOF


4.直接読み取り-CHAIN

直接読み取り

順次読み取りとは異なり、特定のレコードをランダムに読み取る命令です。
「演算項目1」で指定した探索キーと一致するレコードを直接読み取ります。
ファイル仕様書の「レコードアドレスの種類」に基づき、到着順アクセス・パスを用いる処理かキー順アクセス・パスを用いる処理かが決まります。
 [レコードアドレスの種類]
 K   :キー順アクセス・パスを用いる処理
 ブランク:到着順アクセス・パス(相対レコード番号順)を用いる処理

CHAIN命令
「演算項目1」で指定した探索キーと一致するレコードを直接読み取ります。
「演算項目1」  :探索キー(複合キーでもよい)
「演算命令」   :CHAIN
「演算項目2」  :ファイル名またはレコード様式名
「結果の標識HI」:探索キーと一致するレコードが無い場合にオンセットされます。
「結果の標識LO」:読み取りの不成功を示す標識
          レコードの読み取りが不成功の時にオンセットされます。
「結果の標識EQ」:不可
※「演算項目1」はデータベース・ファイルのキーと同じ属性を持った探索キーになります。

POINT

組み込み関数
%FOUND(検出条件の戻し)
1)%FOUNDをセットする命令(ファイル命令)
  CHAIN/DELETE/SETGT/SETLL
2)%FOUNDをセットする命令(ストリング命令)
  LOOKUP
  実行されたファイル命令がレコードを見つけた場合'1'を、他の場合は'0'を戻します。
  [演算命令]    :命令コード
  [演算項目2]   :%FOUND
            :NOT %FOUND

              
CL0N01FACTOR1+++++++OPCODE&EXTFACTOR2+++++++RESULT++++++++LEN++D+HILOEQ....
C* TESTDBが読み込めた場合
C          READ   TESTDB
C          IF    %FOUND(TESTDB)
C* TESTDBが読み込めない場合
C          READ   TESTDB
C          IF    NOT %FOUND(TESTDB)