索引ファイルの使用
本章では、データベースに作成されたオブジェクトをアプリケーションで索引ファイルとして使用する方法について説明します。
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句(オプション) |
アプリケーションで索引ファイルにアクセスする方法を指定します。指定しない場合は、順次アクセス方式が適用されます。
|
RECORD KEY句(必須) |
データベースにアクセスする際、キーとなるフィールド情報を指定します。 レコードのキーとして使用するには、対応するフィールド情報が事前に索引として作成されている必要があります。索引は、JYQDDUTYユーティリティを使用して作成します。 |
ALTERNATE KEY句(オプション) |
データベースにアクセスする際、レコードキー以外の代替キーを指定します。 代替キーは、レコードキーと違って二重キーを許可しており、この場合は、WITH DUPLICATESを指定します。また、レコードキーと同様に対応するフィールド情報が事前に索引として作成されている必要があります。 |
FILE STATUS(オプション) |
索引ファイルとして処理する際、ステータス情報を示すフィールドです。 |
2.3. PROCEDURE DIVISION(手続き部)の作成方法
PROCEDURE DIVISIONには、処理する索引ファイルの入出力文を記述します。
OPEN文
OPEN文は、索引ファイルの処理を行うための準備をします。
OPEN open_mode filename
項目 | 説明 |
---|---|
open_mode |
ファイルのオープンモードを指定します。
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句 |
ユーザーが指定した検索条件に該当するレコードが存在しない場合は、無効キー条件が発生します。 |