VSAMノーマライザトランスフォーメーションは、COBOLソース定義のソース修飾子です。COBOLソースは、複数出現データおよび数種のレコードを同じファイル内に格納できるフラットファイルです。
VSAM(Virtual Storage Access Method)は、IBMメインフレームオペレーティングシステムのファイルアクセス方式です。VSAMファイルでは、インデックス付きまたはシーケンシャルのフラットファイルでレコードが編成されます。ただし、VSAMノーマライザトランスフォーメーションは、COBOLソース定義で定義されるどのようなフラットソースファイルにも使用することができます。
COBOLソース定義には、複数出現カラムを定義するOCCURS文を含めることができます。 また、COBOLのソース定義にREDEFINES文を含めることにより、1ファイル内に複数のレコードを定義することができます。
売上レコードを定義するCOBOLコピーブックは、次のとおりです。
01 SALES_RECORD.
03 HDR_DATA.
05 HDR_REC_TYPE PIC X.
05 HDR_STORE PIC X(02).
03 STORE_DATA.
05 STORE_NAME PIC X(30).
05 STORE_ADDR1 PIC X(30).
05 STORE_CITY PIC X(30).
03
DETAIL_DATA REDEFINES STORE_DATA.
05 DETAIL_ITEM PIC 9(9).
05 DETAIL_DESC PIC X(30).
05 DETAIL_PRICE PIC 9(4)V99.
05 DETAIL_QTY PIC 9(5).
05
SUPPLIER_INFO OCCURS 4 TIMES
.
10 SUPPLIER_CODE PIC XX.
10 SUPPLIER_NAME PIC X(8).
売上ファイルに格納できる売上レコードは、2種類あります。店舗はStore_Dataで定義され、店舗で販売されている商品はDetail_Dataで定義されます。REDEFINES句により、レコード内にStore_DataフィールドでなくDetail_Dataフィールドが出現するよう指示されます。
各売上レコードの先頭3文字は、ヘッダです。ヘッダには、レコードタイプおよび店舗IDが含まれています。残りのレコードの中に店舗情報または商品情報のどちらが格納されているかは、Hdr_Rec_Typeの値で定義されます。たとえば、Hdr_Rec_Typeが"S"なら、レコードに格納されているのは店舗データです。Hdr_Rec_Typeが"D"なら、レコードに格納されているのは詳細データです。
詳細データがレコードに格納されているときは、Supplier_Infoフィールドが含まれています。各Detail_Dataレコード内の4サプライヤは、OCCURS句で定義されます。
以下の図は、COBOLコピーブックから作成できるSales_File COBOLソース定義を示しています。
Sales_Recカラム、Hdr_Dataカラム、Store_Dataカラム、Detail_Dataカラム、およびSupplier_Infoカラムは、下位レベルデータのグループを識別するグループレベルのカラムです。グループレベルのカラムはデータを含まないため、長さがゼロです。これらのカラムはいずれも、ソース定義内の出力ポートには該当しません。
Supplier_Infoグループには、Supplier_CodeカラムおよびSupplier_Nameカラムが含まれています。Supplier_Infoグループは、Detail_Dataレコード内に4回出現します。
Mapping DesignerでCOBOLソース定義からVSAMノーマライザトランスフォーメーションを作成すると、そのCOBOLソース定義に応じた入出力ポートがノーマライザトランスフォーメーション内に作成されます。ノーマライザトランスフォーメーションには、生成キーの出力ポートが少なくとも1つは含まれています。COBOLソースに複数出現カラムが含まれている場合、ノーマライザトランスフォーメーションは生成カラムIDの出力ポートを持ちます。
以下の図は、Mapping Designerでソース定義から作成されたノーマライザトランスフォーメーションポートを示しています。
Supplier_Infoグループのカラムは、各COBOLソース行の中に4回出現します。
COBOLソース行には、次のようなデータが含まれています。
Item1 ItemDesc 100 25 A Supplier1 B Supplier2 C Supplier3 D Supplier4
ノーマライザトランスフォーメーションは、Supplier_CodeカラムおよびSupplier_Nameカラムのオカレンスごとに行を返します。各出力行に含まれる品目、説明、価格、および数量はそれぞれ同じ値です。
ノーマライザがCOBOLソース行から返す詳細データ行は、次のとおりです。
Item1 ItemDesc 100 25 A Supplier1 1 1
Item1 ItemDesc 100 25 B Supplier2 1 2
Item1 ItemDesc 100 25 C Supplier3 1 3
Item1 ItemDesc 100 25 D Supplier4 1 4
各出力行には、生成キーおよびカラムIDが含まれます。生成されたキー値は、新しいソース行の処理時に更新されます。詳細データ行の中の生成済みキー値は1です。
Supplier_Infoカラムのオカレンス番号は、カラムIDで定義されます。カラムIDは、Supplier_Infoカラムのオカレンス番号ごとに更新されます。詳細データ行の中のカラムID値は、1、2、3、4です。