定界符格式的语法

定界符格式的语法指定字段定界符、输入文件和每行数据中的字段数。

下图显示了定界符 FILE 语句的语法。
元素 用途 重要注意事项
c 为特定输入文件指定作为字段定界符的字符 如果由 c 指定的定界符在输入文件的任何地方以文字字符出现,那么在输入文件中必须在该字符前加上反斜杠 (\)。例如:如果 c 的值指定为方括号 ([),那么您必须在输入文件中出现的任何文字方括号之前放置反斜杠。同样,必须在输入文件中出现的任何反斜杠之前放置附加的反斜杠。
filename 指定输入文件 无。
nfields 指示每个数据行中的字段数 无。

dbload 实用程序将序列名 f01f02f03 等(依此类推)指定给输入文件中的字段。您看不到这些名称,但是如果您在关联的 INSERT 语句中引用这些字段来指定值列表,那么必须使用 f01f02f03 格式。有关详细信息,请参阅如何编写定界符格式的 dbload 命令文件

两个连续的定界符定义了一个空字段。作为预防措施,您可紧接在标志每个数据行结束的换行字符前面放置一个定界符。如果数据行的最后字段有数据,那么必须使用定界符。如果您省略此定界符,那么无论何时当数据行的最后字段不为空时都将导致错误。

插入的数据类型对应于显式或缺省列列表。如果数据字段宽度与其对应的字符列宽度不同,将使数据符合列宽度。即,如果插入数据达不到列宽度将对其填充空格,或如果超过列宽度,那么会将其截短。

如果命名的列数少于表中的列数,dbload 将向未命名的列插入表创建指定的缺省值。如果未指定缺省值,dbload 将尝试插入空值。如果这个尝试违反了非空约束或唯一约束,那么插入操作将失败且将返回错误消息。

如果 INSERT 语句省略列名,那么 INSERT 缺省指定语句中指定的表中的每一列。如果 INSERT 语句省略了 VALUES 子句,那么 INSERT 缺省指定先前的 FILE 语句的每个字段。

如果列出的(或由缺省隐含的)列名数不匹配列出的(或由缺省隐含的)值数,将导致错误。

dbload INSERT 语句的语法类似于 SQL 中的 INSERT 语句,不同之处在于,在 dbload 中,INSERT 语句无法与 SELECT 语句合并使用。

不要在 dbload 命令文件中使用 INSERT INTO 语句的 CURRENT、TODAY 和 USER 关键字;它们在 dbload 命令文件中不受支持。这些关键字只在 SQL 中受支持。

例如:以下 dbload 命令不受支持:
FILE "testtbl2.unl" DELIMITER '|' 1; 
            INSERT INTO testtbl  
                                (testuser, testtime, testfield) 
                          VALUES  
                                ('kae', CURRENT, f01);
首先装入现有数据,然后写 SQL 查询,以使用当前时间、日期或用户登录来插入或更新数据。您可写以下 SQL 语句:
INSERT INTO testtbl  
                              (testuser, testtime, testfield) 
                        VALUES  
                              ('kae', CURRENT, f01);

CURRENT 关键字返回系统日期和时间。TODAY 关键字返回系统日期。USER 关键字返回用户登录名称。

下图显示了定界符格式的 dbload INSERT 语句的语法。
元素 用途 重要注意事项
column 指定接收新数据的列 无。
owner. 指定表所有者的用户名 无。
table 指定接收新数据的表 无。

使用此命令文件运行 dbload 的用户必须在命名的表上具有 Insert 特权。

1 请参阅《GBase 8s SQL 指南:语法》。