示例: 使用 DDS 描述物理文件

此示例显示如何使用 DDS 描述物理文件。

物理文件的 DDS (如下一个示例中所示) 必须按以下顺序:
第 1 年
文件级条目 (可选)。 UNIQUE 关键字用于指示文件中每个记录中关键字段的值必须唯一。 此文件中不允许存在重复的键值。
2
记录格式级别条目。 指定了记录格式名称以及可选文本描述。
3
字段级别条目。 指定了字段名称和字段长度以及每个字段的可选文本描述。
4
键字段级别条目 (可选)。 指定用作关键字段的字段名称。
5 代
注释 (可选)。
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
     A* ORDER HEADER FILE (ORDHDRP)
     A  5
     A                                   1  UNIQUE
     A       2  R ORDHDR                    TEXT('Order header record')
     A         3  CUST           5   0      TEXT('Customer number')
     A            ORDER          5   0      TEXT('Order number')
     A            .
     A            .
     A            .
     A          K CUST
     A       4  K ORDER

以下示例显示了物理文件 ORDHDRP (订单头文件) ,其中指定了未指定关键字段的到达顺序访问路径以及描述该文件所必需的 DDS。

物理文件 ORDHDRP 的记录格式

|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
     A* ORDER HEADER FILE (ORDHDRP)
     A          R ORDHDR                    TEXT('Order header record')
     A            CUST           5   0      TEXT('Customer Number')
     A            ORDER          5   0      TEXT('Order Number')
     A            ORDATE         6   0      TEXT('Order Date')
     A            CUSORD        15   0      TEXT('Customer Order No.')
     A            SHPVIA        15          TEXT('Shipping Instr')
     A            ORDSTS         1          TEXT('Order Status')
     A            OPRNME        10          TEXT('Operator Name')
     A            ORDAMT         9   2      TEXT('Order Amount')
     A            CUTYPE         1          TEXT('Customer Type')
     A            INVNBR         5   0      TEXT('Invoice Number')
     A            PRTDAT         6   0      TEXT('Printed Date')
     A            SEQNBR         5   0      TEXT('Sequence Number')
     A            OPNSTS         1          TEXT('Open Status')
     A            LINES          3   0      TEXT('Order Lines')
     A            ACTMTH         2   0      TEXT('Accounting Month')
     A            ACTYR          2   0      TEXT('Accounting Year')
     A            STATE          2          TEXT('State')
     A

位置 17 中的 R 指示正在定义记录格式。 记录格式名 ORDHDR 在位置 19 至 28 中指定。

当您描述字段时,在位置 17 中没有任何项; 位置 17 中的空白以及位置 19 到 28 中的名称指示字段名称。

在位置 35 中指定了数据类型。 有效数据类型为:
含义
A
字符
P
压缩十进制
S
分区十进制
B
二进制
F
二进制浮点
H
十六进制
L
日期
T
时间
Z
时间戳记
注:
  1. 有关双字节字符集 (DBCS) 数据类型,请参阅 双字节字符集注意事项
  2. 与分区十进制数据类型相比,系统对压缩十进制执行算术运算的效率更高。
  3. 某些高级语言不支持二进制浮点数据。
  4. 以下是使用二进制浮点字段的一些特殊注意事项:
    • 与二进制浮点字段相关联的精度是位数 (单精度或双精度) 和二进制浮点值的内部表示的函数。 这将转换为可以在二进制浮点字段中表示的有效和最大值中支持的小数位数。
    • 当定义二进制浮点字段的数字少于指定的精度所支持的数字时,该长度只是表示长度,对用于内部计算的精度没有影响。
    • 虽然二进制浮点数精确到精度为 7 (单) 或 15 (双) 的十进制数字,但您最多可以指定 9 或 17 位数字。 您可以使用额外的数字来唯一地建立内部二进制浮点格式的内部位模式,以便在内部格式的二进制浮点数转换为十进制并再次转换为内部格式时获得相同的结果。

如果未指定数据类型 (位置 35) ,那么将使用小数位项来确定数据类型。 如果小数位 (位置 36 到 37) 为空,那么假定数据类型为字符 (A); 如果这些位置包含数字 0 到 31 ,那么假定数据类型为压缩十进制 (P)。

字段的长度在位置 30 到 34 中指定,小数位数 (对于数字字段) 在位置 36 和 37 中指定。 如果要在高级语言程序中使用压缩或分区十进制字段,那么字段长度必须限制为您正在使用的高级语言所允许的长度。 长度不是存储器中字段的长度,而是从存储器外部指定的数字或字符数。 例如, 5 数字压缩十进制字段在 DDS 中指定了长度 5 ,但它仅使用 3 字节的存储空间。

通过指定 VARLEN 字段级关键字,可以将字符或十六进制数据定义为可变长度。 通常,您将使用可变长度字段,例如,作为数据库中的员工名称。 名称通常可以存储在 30 个字节的字段中; 但是,有时需要 100 个字节来存储非常长的名称。 如果始终将该字段定义为 100 字节,那么将浪费存储空间。 如果始终将字段定义为 30 个字节,那么某些名称将被截断。

可以使用 DDS VARLEN 关键字将字符字段定义为可变长度。 您可以将此字段定义为:
  • 无分配长度的可变长度。 这允许仅使用等于数据的字节数 (加上长度值为每个字段两个字节,每个记录有几个开销字节) 来存储该字段。 但是,可能会影响性能,因为所有数据都存储在文件的可变部分中,这需要两个磁盘读操作才能检索。
  • 可变长度,其分配长度等于最可能的数据大小。 这允许将大多数字段数据存储在文件的固定部分中,并最大限度减少与固定长度字段定义相同的未使用的存储分配。 仅需要一个读操作来检索长度小于已分配字段长度的字段数据。 长度大于分配长度的字段数据存储在文件的可变部分中,并且需要两个读操作来检索数据。