装入智能大对象
数据库服务器从客户端计算机上独立的操作系统文件装入智能大对象(BLOB 和 CLOB 列)。要了解此文件的结构,请参阅 卸载智能大对象。
在 LOAD FROM 文件中,CLOB 或 BLOB 列值如下所示:
start_off,length,client_path
在此格式中,start_off 为该客户端文件内的智能大对象值的起始偏移量(以十六进制计), length 为 BLOB 或 CLOB 值的长度(以十六进制计),client_path 为客户端文件的路径名。在这些值之间不可出现空格。
例如,要装入 /usr/apps/clob9ce7.318 文件中的 512 字节长且偏移量 256 的 CLOB 值,数据库服务器期望在 LOAD FROM 文件中出现如下的 CLOB 值:
|100,200,/usr/apps/clob9ce7.318|
如果要装入整个客户端文件,则在 LOAD FROM 文件内出现如下的 CLOB 或 BLOB 列值:
client_path
例如,要装入占据整个文件 /usr/apps/clob9ce7.318 的 CLOB 值,数据库服务器期望在 LOAD FROM 文件中出现下列 CLOB 值:
|/usr/apps/clob9ce7.318|
在 DB-Access 中,在从 DB-Access 中执行的文件内 USING 子句有效。在交互模式下,DB-Access 提示您输入密码,因此不使用 USING 关键字和 validation_var。
对于 CLOB 列,数据库服务器为该数据处理任何需要的代码集转换。另请参阅 GBase 8s GLS 用户指南。
装入复杂数据类型
在 LOAD FROM 文件中,复杂数据类型如下所示:
- 以适当的构造函数(SET、MULTISET 或 LIST)引入集合,且其元素括在大括号({ })中,并以逗号分隔,如下:
constructor{val1 , val2 , ... }
例如,要将 SET 值 {1, 3, 4} 装入到其数据类型为 SET(INTEGER NOT NULL) 的列内,则 LOAD FROM 文件的相应字段显示为:
|SET{1 , 3 , 4}|
- 以 ROW 构造函数引入行类型(命名的和未命名的),以圆括号括起其字段,并以逗号分隔,如下:
ROW(val1 , val2 , ... )
例如,要装入 ROW 值 (1, 'abc'),LOAD FROM 文件的相应的字段显示为:
|ROW(1 , abc)|
装入 opaque 类型列
当插入某些 opaque 数据类型时,它们需要特殊的处理。例如,如果 opaque 数据类型包括占据空间的或多重表示的数据,则它可能提供如何存储该数据的选项:是在内部的结构之中,对于大对象,或在智能大对象中。
通过调用名为 assign( ) 的用户定义的支持函数来完成此处理。当您在其行包含这些 opaque 类型之一的表上执行 LOAD 语句时,数据库服务器自动地为该类型调用 assign( ) 函数。assign( ) 函数可确定如何存储数据。要了解更多关于 assign( ) 支持函数的信息,请参阅 GBase 8s 用户定义的例程和数据类型开发者指南 。
DELIMITER 子句
使用 DELIMITER 子句来指定分隔在输入文件中的行中的每一列中包含的数据的定界符。 您可指定 (CTRL-I) 或空格(= ASCII 32)作为定界符号。您不可使用下列项作为定界符号:
- 反斜杠(\)
- NEWLINE 字符 (CTRL-J)
- 十六进制数(0 至 9、a 至 f、A 至 F)
如果您省略此子句,则数据库服务器检查 DBDELIMITER 环境变量。要获得关于如何设置 DBDELIMITER 环境变量的信息,请参阅 GBase 8s SQL 参考指南。
如果尚未设置 DBDELIMITER 环境变量,则缺省的定界符为管道(|)。
下列示例指定分号( ;)作为定界符号。该示例使用 Windows™ 文件命名约定。
LOAD FROM 'C:\data\loadfile' DELIMITER ';'
INSERT INTO orders;
INSERT INTO 子句
使用 INSERT INTO 子句来指定要将新数据装入其中的表、同义词或视图。
您必须指定列名称仅当下列条件之一为真:
- 您不是将数据装入所有列内。
- 输入文件与这些列的缺省顺序不匹配(当创建表时指定的顺序)。
INTO 子句不可指定 CREATE EXTERNAL TABLE 语句定义的表对象。
下列示例标识 price 和 discount 列作为向其中添加数据的仅有的列。该示例使用 Windows™ 文件命名约定。
LOAD FROM 'C:\tmp\prices' DELIMITER ','
INSERT INTO norman.worktab(price,discount)