索引ファイルの使用

本章では、データベースに作成されたオブジェクトをアプリケーションで索引ファイルとして使用する方法について説明します。

1. JCLで処理する方法

作成された索引ファイルをアプリケーションで使用するためには、JCLのファイル情報を指定する必要があります。JCLを作成する際は、メタ情報を指定するためにSYSDBDCTのFDを指定する必要があります。RDBIIでは、SYSDBDCTに指定されたメタ情報を使用して構成要素に関する情報を取得します。

使用するデータセット名は、アプリケーションで定義したDD名に指定します。

\     JOB RDBIITST
\STEP0 EX RDBIITST
\      FD PRGLIB=DA,FILE=SYS1.COBLIB
\      FD SYSDBDCT=DA,FILE=TMAX.RDBII.MDB
\      FD AIMPED=SSI,SUBSYS=(AIM,RDBIITST,AIMAPG0)
\      FD INDD=DA,FILE=TMAX.RDBII.SAMPLE
\      FD SYSOUT=DA,SOUT=T
\      FD SYSDBOUT=DA,SOUT=T
\      FD LIST=DA,SOUT=A

上記の例では、SYSDBDCTに指定されているTMAX.RDBII.MDBをメタデータベースとして使用することを示しています。また、RDBIITSTというプログラムでINDDをTMAX.RDBII.SAMPLEに定義しています。

2. COBOLプログラムで索引ファイルの使用

本節では、COBOLプログラムの各DIVISIONを作成する方法について説明します。

2.1. ENVIRONMENT DIVISION(環境部)の作成方法

ENVIRONMENT DIVISIONでは、JCLで使用するFDNAME(fdname)、ファイルのORANIZATION情報(INDEXED)、KEY(record-key)などの索引ファイルの情報を記述します。

SELECT filename ASSIGN      TO fdname
       ORGANIZATION         IS INDEXED
       ACCESS MODE          IS access-mode
       RECORD KEY           IS record-key
       ALTERNATE KEY        IS alternate-key [WITH DUPLICATES]
       FILE STATUS          IS file-status.
項目 説明

SELECT句(必須)

アプリケーションで使用するファイル名を指定します。ファイル名は、OPEN、CLOSE、START、READ文で使用されます。

ASSIGN句(必須)

アプリケーションで使用するDD名を指定します。DD名は、アプリケーションとJCLで指定したDD名と同じ名前である必要があります。

ORGANIZATION句(必須)

アプリケーションでは索引ファイルとして使用するため、常にINDEXEDに指定する必要があります。SEQUENTIALやRELATIVE、あるいは指定しない場合は、エラーが発生します。

ACCESS METHOD句(オプション)

アプリケーションで索引ファイルにアクセスする方法を指定します。指定しない場合は、順次アクセス方式が適用されます。

  • SEQUENTIAL : 順次アクセスです。レコードのキーまたは代替キーで指定した順番にレコードを処理します。

  • RANDOM : ランダムアクセスです。ユーザーが指定したレコードのキーまたは代替キーで指定したレコードを直接処理します。

  • DYNAMIC : 動的アクセスです。順次処理とランダム処理の両方を実行できます。

RECORD KEY句(必須)

データベースにアクセスする際、キーとなるフィールド情報を指定します。

レコードのキーとして使用するには、対応するフィールド情報が事前に索引として作成されている必要があります。索引は、JYQDDUTYユーティリティを使用して作成します。

ALTERNATE KEY句(オプション)

データベースにアクセスする際、レコードキー以外の代替キーを指定します。

代替キーは、レコードキーと違って二重キーを許可しており、この場合は、WITH DUPLICATESを指定します。また、レコードキーと同様に対応するフィールド情報が事前に索引として作成されている必要があります。

FILE STATUS(オプション)

索引ファイルとして処理する際、ステータス情報を示すフィールドです。

2.2. DATA DIVISION(データ部)の作成方法

DATA DIVISIONには、アクセスするレコードの情報を記述します。レコード情報には、レコードのキー情報が含まれている必要があります。

2.3. PROCEDURE DIVISION(手続き部)の作成方法

PROCEDURE DIVISIONには、処理する索引ファイルの入出力文を記述します。

OPEN文

OPEN文は、索引ファイルの処理を行うための準備をします。

OPEN open_mode filename
項目 説明

open_mode

ファイルのオープンモードを指定します。

  • INPUT : 索引ファイルを入力用としてオープンします。

  • OUTPUT : 索引ファイルを出力用としてオープンします。

  • I-O : 索引ファイルを入出力用としてオープンします。

RDBIIでは、OUTPUTモードでオープンしても、非VSAMやVSAMと違ってTRUNCATE処理されません。

filename

オープンするファイル名を指定します。

CLOSE文

CLOSE文は、ファイルの処理を終了します。終了処理された索引ファイルに対してREADなどの処理を実行すると、エラーが発生します。

CLOSE filename
項目 説明

filename

終了するファイル名を指定します。

READ文

データベースからレコードを読み込みます。データベースでのレコードの位置は、START文を使用して指定可能です。ただし、順次アクセスの場合は最初のレコードから順に読み込み、直接アクセスの場合はユーザーが指定したレコードのキー値に対応するレコードを読み込みます。

READ filename NEXT RECORD INTO identifier exception END-READ.
READ filename RECORD INTO identifier exception END-READ.
項目 説明

filename

読み込むファイル名を指定します。

NEXT句

順次アクセスおよび動的アクセスで指定可能であり、現在位置のレコードの次のレコードを読み込みます。順次アクセスの場合は省略できますが、動的アクセスの場合は必須です。

INTO句

データベースから読み込んだレコードを格納するバッファーを指定します。INTO句を指定しなくても、レコード・バッファーに格納されます。

AT-END句

順次アクセスおよび動的アクセスを処理する際に、レコードの終わりが検出されると発生します。

exception句

索引ファイルを直接アクセス・モードで処理した場合、レコードキーに対応するレコードが存在しないと無効キー(INVALID KEY)条件が発生します。

WRITE文

データベースに新しいレコードを書き込みます。

WRITE record-identifier FROM identifier exception END-WRITE.
項目 説明

record-identifier

FILEセクションに定義したレコードのバッファーが格納されているレコード・バッファーを指定します。

FROM句

FILEセクションで定義されない他のバッファーの内容を格納するときに指定します。

exception句

データベースに重複したレコードキーが存在する場合は、無効キー条件が発生します。

REWRITE文

データベース内にあるレコードを置き換えます。レコードのキー値を変更することはできません。順次アクセスの場合は、REWRITE処理の前にREAD文を実行する必要があります。直接アクセスの場合は、READ文を実行せずにレコードキーを指定してレコードを置き換えることができます。

REWRITE record-identifier FROM identifier exception END-WRITE.
項目 説明

record-identifier

FILEセクションに定義したレコードのバッファーが格納されているレコード・バッファーを指定します。

FROM句

FILEセクションで定義されない他のバッファーの内容を格納するときに指定します。

exception句

データベースに重複したレコードキーが存在する場合は、無効キー条件が発生します。

DELETE文

データベース内のレコードを削除します。順次アクセスの場合は、DELETE処理の前にREAD文を実行する必要があります。直接アクセスの場合は、READ文を実行せずにレコードキーを指定してレコードを削除することができます。

DELETE filename RECORD exception.
項目 説明

filename

FILEセクションに定義したレコードのバッファーが格納されているレコード・バッファーを指定します。

exception句

データベースにレコードキーが存在しない場合は、無効キー条件が発生します。

START文

レコードへのアクセス時にレコードの位置を指定します。START文を使用すると、指定した条件を満たす最初のレコードに位置することになり、READを処理する際にその位置のレコードを読み込みます。

START filename condition excpetion
項目 説明

filename

処理するファイル名を指定します。このファイルはオープンされている必要があります。

condition

検索条件を指定します。レコードのキーまたは代替キーを指定できます。

exception句

ユーザーが指定した検索条件に該当するレコードが存在しない場合は、無効キー条件が発生します。