如何编写字符位置格式的 dbload 命令文件

命令文件必须定义数据字段,并使用字符位置来定义每个字段的长度。

以下示例中的 FILE 语句定义了 cust_loc_data 表数据行中的六个数据字段。

FILE cust_loc_data
      (city 1-15,
        state 16-17,
        area_cd 23-25 NULL = 'xxx',
        phone 23-34 NULL = 'xxx-xxx-xxxx',
        zip 18-22,
        state_area 16-17 : 23-25);
INSERT INTO cust_address (col1, col3, col4)
      VALUES (city, state, zip);
语句命名了字段并使用字符位置来定义每个字段的长度。将前面示例中的 FILE 语句与下图中的数据行进行比较。

图: 样本数据文件


此图显示了包含城市、州、邮编和电话信息的两个数据行。
FILE 语句定义了以下数据字段,它们从样本数据文件中的数据行派生而来。
来自数据行 1 的值 来自数据行 2 的值
city Sunnyvale++++++ Tempe++++++++++
state CA AZ
area_cd 408 null
phone 408-789-8075 null
zip 94086 85253
state_area CA408 AZxxx

phonearea_cd 字段定义的空字符串在这些列中生成空值,但不影响存储在 state_area 列中的值。

该 INSERT 语句将从 FILE 语句派生而来的字段名和值用作值列表输入。请考虑以下 INSERT 语句:
INSERT INTO cust_address (col1, col3, col4)
      VALUES (city, state, zip);
该 INSERT 语句使用样本数据文件中的数据,并且 FILE 语句将以下信息放入 cust_address 表中。
来自数据行 1 的值 来自数据行 2 的值
col1 Sunnyvale++++++ Tempe++++++++++
col2 null null
col3 CA AZ
col4 94086 85253

由于没有命名 cust_address 中的第二列 (col2),所以新的数据行将包含空值(假定该列允许空值)。

请考虑以下 INSERT 语句:
INSERT INTO cust_sort 
      VALUES (area_cd, zip);
该 INSERT 语句将以下数据行插入 cust_sort 表中。
来自数据行 1 的值 来自数据行 2 的值
col1 408 null
col2 94086 85253

由于没有提供列列表,dbload 从系统目录读取 cust_sort 中所有列的名称。(您不能将数据插入临时表,因为临时表不会进入系统目录。)前面的 FILE 语句的字段名称指定了要装入每列中的值。您无需对每个 INSERT 语句使用一个 FILE 语句。