支持变长记录的属性

当声明记录部件时,可以包括支持使用变长记录的属性可以将变长串行记录用于访问顺序文件,可以将变长串行记录或带索引记录用于访问 VSAM 文件,并且可以将变长 MQ 记录用于访问 MQSeries® 消息队列。

具有 lengthItem 属性的变长记录

lengthItem 属性(如果存在的话)标识在下列情况下使用的项:
  • 代码从文件或队列中读取记录。长度项接收读入变长记录中的字节数。
  • 代码写记录。长度项指定要添加到文件或队列中的字节数。
长度项可以是下列任何一项:
  • 同一记录中的结构项
  • 记录中对于程序来说是全局的或对于访问该记录的函数来说是局部的结构项(可以使用在程序或函数中声明的记录变量来限定长度项)
  • 对于程序来说是全局的或对于访问记录的函数来说是局部的数据项
长度项具有下列特征:
  • 具有基本类型 BIN、DECIMAL、INT、NUM 或 SMALLINT
  • 不包含小数位
  • 最多允许 9 位数
以下是一个带有 lengthItem 属性的变长记录部件的示例:
  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 属性的变长记录

NumElementsItem 属性(如果存在的话)标识当代码对文件或队列进行添加或更新操作时使用的项。变长记录必须将一个数组作为最后一个顶级结构项。元素数目项中的值表示写入的实际数组元素数目。该值的范围可以从 0 到最大值(最大值是在记录中的最后一个顶级结构项的声明中指定的 occurs 值)。

写入的字节数等于下列各项之和:
  • 记录的定长部分的字节数。
  • 元素数目项的值乘以结束数组的每个元素中的字节数。
元素数目项具有下列特征:
  • 具有基本类型 BIN、DECIMAL、INT、NUM 或 SMALLINT
  • 不包含小数位
  • 最多允许 9 位数
以下是一个带有 numElementsItem 属性的变长记录部件的示例:
  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 属性的变长记录

如果对变长记录同时指定了 lengthItem 和 numElementsItem 属性,则使用元素数目项来计算记录的长度。在将记录写入文件之前,将把计算出的长度移动到记录长度项中。

在进行调用或转移时传递的变长记录

如果在进行调用时传递了变长记录,则下列描述是适用的:
  • 为该记录保留空间,并且空间的大小就是对该记录指定的最大长度
  • 如果 callLink 元素的属性 type 的值为 remoteCall 或 ejbCall,则长度项(如果有的话)必须位于记录内部;有关详细信息,请参阅 callLink 元素

同样,如果在转移时传递了变长记录,则为该记录保留空间,并且空间的大小就是对该记录指定的最大长度。

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.