当声明记录部件时,可以包括支持使用变长记录的属性。可以将变长串行记录用于访问顺序文件,可以将变长串行记录或带索引记录用于访问 VSAM 文件,并且可以将变长 MQ 记录用于访问 MQSeries® 消息队列。
Record mySerialRecordPart1 type serialRecord { fileName = "myFile", lengthItem = "myOtherField" } 10 myField01 BIN(4); // 2 bytes long 10 myField02 NUM(3); // 3 bytes long 10 myField03 CHAR(20); // 20 bytes long end除非项是字符项,否则,在写记录时,长度项的值必须落在项边界之间。例如,类型为 mySerialRecordPart1 的记录可以具有长度项 myOtherField,该长度项设置为 2, 5, 6, 7, ... , 24, 25。myOtherField 设置为 2 的记录仅包含 myField01 的值;myOtherField 设置为 5 的记录包含 myField01 和 myField02 的值;myOtherField 设置为 6 到 24 的记录还包含 myField03 的一部分。
NumElementsItem 属性(如果存在的话)标识当代码对文件或队列进行添加或更新操作时使用的项。变长记录必须将一个数组作为最后一个顶级结构项。元素数目项中的值表示写入的实际数组元素数目。该值的范围可以从 0 到最大值(最大值是在记录中的最后一个顶级结构项的声明中指定的 occurs 值)。
Record mySerialRecordPart2 type serialRecord { fileName = "myFile", numElementsItem = "myField02" } 10 myField01 BIN(4); // 2 bytes long 10 myField02 NUM(3); // 3 bytes long 10 myField03 CHAR(20)[3]; // 60 bytes long 20 mySubField01 CHAR(10); 20 mySubField02 CHAR(10); end在元素数目项 myField02 设置为 2 的情况下写入类型为 mySerialRecordPart2 的记录导致将具有 myField01、myField02 以及 myField03 的两次出现的变长记录写入文件或队列。
元素数目项必须是变长记录的固定长度部分中的项。使用未限定引用来命名元素数目项。例如,使用 myField02 而不是 myRecord.myField02。
当从文件中读取记录时,元素数目项不起作用。
如果对变长记录同时指定了 lengthItem 和 numElementsItem 属性,则使用元素数目项来计算记录的长度。在将记录写入文件之前,将把计算出的长度移动到记录长度项中。
同样,如果在转移时传递了变长记录,则为该记录保留空间,并且空间的大小就是对该记录指定的最大长度。
相关概念
MQSeries 支持
记录类型和属性
相关参考
callLink 元素
MQ 记录属性