メインフレームにはSAM、VSAMの概念があります。
SAM、VSAMはファイル編成の方式で、PGMからアクセスする方式が異なります。メインフレームから見た時にはSAMもVSAMもデータ・セットです。VSAMには、次の特徴があります。
VSAM
正式名称は Virtual Storage Access Method です。日本語では 仮想記憶アクセス方式 です。
インデックスの付いたデータ。DBデータのように扱う。そのままでは読めず、データを入れる器を作成するために、DEFINE CLUSTER(クラスター定義)が必要です。
VSAMを管理するには、ユーティリティーである IDCAMS を使用します。IDCAMS は様々な機能を持つユーティリティーで、コマンドとパラメータを指定することで機能を使用します。
サンプルとして、データ・セットを定義してデータをロード、ロードしたデータを印刷するJCLを記載します。
//DEFINE JOB SAMPLE01
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//*DEFINE USERCATALOG カタログを作成する
//*DEFINE CLUSTER データ・セットを定義する
//SYSIN DD *
DEFINE USERCATALOG (NAME (USERCATX) ICFCATALOG CYLINDERS(15 5) -
VOLUMES(VSER05)) DATA (CYLINDERS(3 1))
IF LASTCC = 0 THEN -
DEFINE CLUSTER(NAME (EXAMPL1.KSDS) VOLUMES(VSER05)) -
DATA (KILOBYTES (50 5))
/*
//STEP2 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//AMSDUMP DD SYSOUT=*
//INDSET4 DD DSNAME=SOURCE.DATA,DISP=OLD,
// VOL=SER=VSER02,UNIT=3380
//*REPRO データ・セットをロードする
//*LISTCAT カタログ項目をリストする
//*PRINT データ・セットを印刷する
//SYSIN DD *
REPRO INFILE(INDSET4) OUTDATASET(EXAMPL1.KSDS)
IF LASTCC = 0 THEN -
LISTCAT ENTRIES(EXAMPL1.KSDS)
IF LASTCC = 0 THEN -
PRINT INDATASET(EXAMPL1.KSDS)
/*
詳細には次のアクセス方式がある。(いずれもVSAM用語)
- キー・シーケンス・データセット ( Key Sequenced Data Set )
- 相対レコードデータセット ( Relative Record Data Set )
- エントリー・シーケンス・データセット ( Entry Sequenced Data Set )
- 線形データセット ( Linear Data Set )
上記をCOBOL用語で言うと次のようになる。
- キー・シーケンス・データセット ← 索引付き付きファイル
- 相対レコードデータセット ← 相対ファイル
- エントリー・シーケンス・データセット ← 順次ファイル
参考