VSAM 规范器转换是 COBOL 源定义的源限定符。COBOL 源是一个平面文件,可以包含多次出现的数据和同一文件中多种类型的记录。
VSAM(虚拟存储访问方法)是一种适用于 IBM 大型机操作系统的文件访问方法。VSAM 文件在索引文件或连续平面文件中整理记录。不过,可将 VSAM 规范器转换用于使用 COBOL 源定义定义的任何平面文件源。
COBOL 源定义可以包含 OCCURS 语句,用于定义多次出现的列。COBOL 源定义还可包含 REDEFINES 语句,用于在文件中定义多种类型的记录。
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).
销售文件可以包含两种类型的销售记录。Store_Data 定义了一家商店,而 Detail_Data 则定义了该商店中出售的商品。REDEFINES 子句指示 Detail_Data 字段可以出现在记录中,代替 Store_Data 字段。
每个销售记录的前三个字符是表头。表头包括记录类型和商店 ID。Hdr_Rec_Type 的值定义记录的其余部分是包含商店信息,还是包含商品信息。例如,如果 Hdr_Rec_Type 为“S”,则记录包含商店数据。如果 Hdr_Rec_Type 为“D”,则记录包含详细数据。
如果记录包含详细数据,则将包括 Supplier_Info 字段。OCCURS 子句在每个 Detail_Data 记录中定义了四家供应商。
下图显示了可以通过 COBOL 复写簿创建的 Sales_File COBOL 源定义:
Sales_Rec、Hdr_Data、Store_Data、Detail_Data 和 Supplier_Info 列是组级别的列,用于标识更低级别数据的组。组级别的列长度为 0,因为它们不包含数据。这些列都不是源定义中的输出端口。
Supplier_Info 组包含 Supplier_Code 和 Supplier_Name 列。Supplier_Info 组在每个 Detail_Data 记录中出现了四次。
在通过 COBOL 源定义创建 VSAM 规范器转换时,Mapping Designer 会根据 COBOL 源定义在规范器转换中创建输入/输出端口。规范器转换包含至少一个生成键输出端口。如果 COBOL 源包含多次出现的列,则规范器转换将包含一个生成列 ID 输出类型。
下图显示了 Mapping Designer 通过源定义创建的规范器转换端口:
多个列的 Supplier_Info 组在每个 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。
列 ID 定义 Supplier_Info 列的出现次数。Supplier_Info 每出现一次,集成服务都会更新列 ID。在详细数据行中,列 ID 值为 1、2、3、4。