将批量数据从外部文件导入到数据库表。
LOAD [ INTO ] TABLE [ owner.]table-name [ ( column-name, ... ) ] load-source [ load-option ... ] [ statistics-limitation-option ]
load-source : { FROM filename-expression | USING FILE filename-expression | USING CLIENT FILE client-filename-expression | USING VALUE value-expression | USING COLUMN column-expression }
filename-expression:string | variable
client-filename-expression:string | variable
value-expression:表达式
column-expression : column-name FROM table-name ORDER BY column-list
load-option : BYTE ORDER MARK { ON | OFF } | CHECK CONSTRAINTS { ON | OFF } | { COMPRESSED | AUTO COMPRESSED | NOT COMPRESSED } | { ENCRYPTED KEY 'key' | NOT ENCRYPTED } | COMMENTS INTRODUCED BY comment-prefix | COMPUTES { ON | OFF } | DEFAULTS { ON | OFF } | DELIMITED BY string | ENCODING encoding | ESCAPE CHARACTER character | ESCAPES { ON | OFF } | FORMAT { TEXT | BCP | XML row-xpath ( column-xpath,... ) [ NAMESPACES namespace ] } | SHAPEFILE | HEXADECIMAL { ON | OFF } | ORDER { ON | OFF } | PCTFREE percent-free-space | QUOTE string | QUOTES { ON | OFF } | ROW DELIMITED BY string | SKIP integer | STRIP { ON | OFF | LTRIM | RTRIM | BOTH } | WITH CHECKPOINT { ON | OFF } | WITH { FILE NAME | ROW | CONTENT } LOGGING
statistics-limitation-option : STATISTICS { ON [ ALL COLUMNS ] | ON KEY COLUMNS | ON ( column-list ) | OFF }
comment-prefix:字符串
encoding:字符串
column-name 此子句用于指定要装载数据的一个或多个列。如果 DEFAULTS 选项为 OFF,则将列的列表中不存在的任何列都变为 NULL。如果 DEFAULTS 为 ON 并且列具有缺省值,则使用该值。如果 DEFAULTS 为 OFF 并且列列表中省略了不可为空的列,则数据库服务器会试图将空字符串转换为该列的类型。
如果指定了列列表,它会列出文件中应存在的列以及列的显示顺序。列名不能重复。名称未出现在列表中的列将被设置为 NULL/零/空或 DEFAULT(取决于列的为空性、数据类型和 DEFAULTS 设置)。使用列名 filler() 可指定存在于输入文件中但是要被 LOAD TABLE 语句忽略的列。
load-source 此子句用于指定要从中装载数据的数据源。可以从多个数据源中装载数据。以下列表列出了支持的装载源:
FROM 子句 此子句用于指定文件。将 filename-expression 以字符串的形式传递到数据库服务器。因此,该字符串遵循的数据库格式要求与其它 SQL 字符串一样。尤其是:
要指示目录路径,反斜线字符 (\) 必须用两个反斜线来表示。将数据从文件 c:\temp\input.dat 装载到 Employees 表的语句为:
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' ... |
路径名相对于数据库服务器,而不是客户端应用程序。
可以使用 UNC 路径名从数据库服务器以外的计算机上的文件装载数据。
USING FILE 子句 此子句用于从文件装载数据。其作用等同于指定 FROM filename 子句。
当 LOAD TABLE 语句与 USING FILE 子句一起使用时,可以请求进度消息。
也可以使用 Progress 连接属性确定语句的执行进度。
USING CLIENT FILE 子句 此子句用于从客户端计算机上的文件装载数据。当数据库服务器从 client-filename-expression 检索数据时,数据在服务器的内存中没有实例化,所以数据库服务器对 BLOB 表达式大小的限制并不适用于文件。因此,客户端文件可以具有任意大小。
如果表要从客户端文件装载,则不允许记录文件名。如果未指定记录类型,则将使用 WITH CONTENT LOGGING。
当 LOAD TABLE 语句与 USING CLIENT FILE 子句一起使用时,可以请求进度消息。
也可以使用 Progress 连接属性确定语句的执行进度。
USING VALUE 子句 此子句用于从任何类型为 CHAR、NCHAR、BINARY 或 LONG BINARY 的表达式中或 BLOB 字符串中装载数据。以下是此子句的用法示例:
以下语法使用 xp_read_file 系统过程从目标文件获取要装载的值:
... USING VALUE xp_read_file( 'filename' )... |
以下语法直接指定值,并插入其值分别为 4 和 5 的两行:
... USING VALUE '4\n5'... |
以下语法将 READ_CLIENT_FILE 函数的结果作为值使用:
... USING VALUE READ_CLIENT_FILE( client-filename-expression ) |
在本例中,也可以指定 USING CLIENT FILE client-filename-expression
,因为它们在语义上是等效的。
如果在 LOAD TABLE 语句中未指定 ENCODING 子句,则当 value-expression 为 CHAR 或 BINARY 类型时,将假定 value-expression 的编码为数据库字符集 (db_charset),而当 value-expression 为 NCHAR 类型时,将假定为 NCHAR 数据库字符集 (nchar_charset)。
USING COLUMN 子句 此子句用于从另一个表的单个列装载数据。数据库服务器通过重放 LOAD TABLE...WITH CONTENT LOGGING 语句在恢复期间重放事务日志时使用此子句。LOAD TABLE...WITH CONTENT LOGGING 语句的事务日志记录由原始输入文件块组成。恢复期间当数据库服务器在事务日志中遇到这些块时,会将这些块装入临时表中,然后再从原始装载操作中装载所有的数据。
USING COLUMN 子句中需要以下子句:
table-name 包含要从中装载数据的列的基表或临时表的名称。当从事务日志进行恢复期间被数据库服务器使用时,该表即为保存待分析和装载的行块的表。
column-name table-name 中列的名称,该列用于保存要装载的行块。
column-list 目标表中的一个或多个列,用于在装载数据前对行进行排序。column-list 必须是可验证的唯一值集合,例如在列的列表中所包括的不可为空的列的主键或唯一索引。
load-option 子句 可以通过指定若干装载选项来控制数据的装载方式。下面的列表给出了所支持的装载选项:
BYTE ORDER MARK 子句 此子句用于指定服务器是否应在数据的开始位置搜索和解释字节顺序标记 (BOM)。缺省情况下,此选项设置为 ON。如果 BYTE ORDER MARK 为 OFF,则服务器不搜索 BOM。
如果指定了 ENCODING 子句:
如果未指定 ENCODING 子句:
CHECK CONSTRAINTS 子句 此子句用于控制装载期间是否检查约束。缺省情况下,CHECK CONSTRAINTS 为 ON,但是在 CHECK CONSTRAINTS 为 OFF 时,卸载实用程序 (dbunload) 可写出 LOAD TABLE 语句。将 CHECK CONSTRAINTS 设置为 OFF 禁用检查约束,这很有用,例如,在数据库重建过程。如果表的检查约束调用尚未创建的用户定义函数,则重建将失败,除非将 CHECK CONSTRAINTS 设置为 OFF。
COMMENTS INTRODUCED BY 子句 使用此子句可指定用于在数据文件中引入注释的字符串。使用此选项之后,LOAD TABLE 将忽略任何以字符串 comment-prefix 开头的行。例如,在以下示例中,input.dat 中以 // 开头的行将被忽略。
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' COMMENTS INTRODUCED BY '//' ... |
仅允许在一个新行的开始处使用注释。
如果省略 COMMENTS INTRODUCED BY,则数据文件不得包含注释,因为此时会将这些注释解释为数据。
COMPRESSED 子句 如果要装载的数据在输入文件中以压缩形式存在,请指定 COMPRESSED。数据库服务器会在装载数据前对其进行解压缩。如果指定了 COMPRESSED 但数据并未压缩,则 LOAD 失败并返回错误。
指定 AUTO COMPRESSED 可允许数据库服务器确定输入文件中的数据是否经过压缩。如果经过压缩,则数据库服务器会在装载数据前对其进行解压缩。
如果指定 NOT COMPRESSED,则表示输入文件中的数据未经压缩。如果数据经过压缩,但不希望数据库服务器将其解压缩,这时也可以指定 NOT COMPRESSED。这种情况下,数据在数据库中仍保持加密状态。但是,如果同时对文件进行了加密和压缩,则 NOT ENCRYPTED 只有在同时使用了 NOT COMPRESSED 的情况下才可以使用。
COMPUTES 子句 缺省情况下,此选项为 ON,即允许对已计算的列进行重新计算。将 COMPUTES 设置为 OFF 会禁用计算列的重新计算。COMPUTES 设置为 OFF 很有用,例如,在您重建数据库但表的某个计算列调用尚未创建的用户定义函数时。如果此选项不设置为 OFF,则重建将失败。
COMPUTES 设置为 OFF 时卸载实用程序 (dbunload) 会写出 LOAD TABLE 语句。
DEFAULTS 子句 缺省情况下,DEFAULTS 被设置为 OFF。如果 DEFAULTS 为 OFF,则将任何未显示在列的列表中且可为空的列置为 NULL。如果将 DEFAULTS 设置为 OFF 并且列的列表中省略了不可为空的列,则数据库服务器会试图将空字符串转换为该列的类型。如果将 DEFAULTS 设置为 ON 并且列具有缺省值,则使用该值。
DELIMITED BY 子句
此子句用于指定列分隔符字符串。缺省的列分隔符字符串是逗号;但是它可以是任何长度在 255 字节之内的字符串(如 ... DELIMITED BY '###' ...
)。指定字符串作为分隔符时应加上引号。如果您要指定以制表符分隔的值,可使用制表符 (9) 的十六进制转义序列,... DELIMITED BY '\x09' ...
。
ENCODING 子句 此子句用于指定要装载到数据库中的数据所使用的字符编码。ENCODING 子句不能与 BCP 格式配合使用。
如果在装载操作期间发生转换错误,将根据 on_charset_conversion_failure 选项的设置进行报告。
指定 BYTE ORDER 子句来解释数据中的字节顺序标记。
如果指定了 ENCODING 子句:
如果未指定 ENCODING 子句:
ENCRYPTED 子句 此子句用于指定加密设置。装载加密数据时,应指定 ENCRYPTED KEY,并在其后附加用于加密输入文件中数据的密钥。
如果指定 NOT ENCRYPTED,则表示输入文件中的数据是未加密的。如果数据是加密的,但不希望数据库服务器将其解密,这时也可以指定 NOT ENCRYPTED。这种情况下,数据在数据库中仍保持加密状态。但是,如果同时对文件进行了加密和压缩,则 NOT ENCRYPTED 只有在同时使用了 NOT COMPRESSED 的情况下才可以使用。
ESCAPE CHARACTER 子句 此子句用于指定数据中使用的转义字符。以十六进制代码和符号存储的字符的缺省转义字符是反斜线 (\),例如 \x0A 是换行符。使用 ESCAPE CHARACTER 子句可以对此进行更改。例如,要将感叹号用作转义字符,应输入:
ESCAPE CHARACTER '!' |
建议为转义字符指定的字符串长度不长于一个多字节字符。
ESCAPES 子句 此子句用于控制是否识别转义字符。在 ESCAPES 设置为 ON(缺省值)的情况下,数据库服务器会识别转义字符(缺省值为 \)后面的字符并将其解释为特殊字符。换行符可以作为组合 \n 包含在数据中,其它字符可以作为十六进制 ASCII 代码(如使用 \x09 代替制表符)包含在数据中。两个连续的反斜线字符 ( \\ ) 被解释为单个反斜线。任何除 n、x、X 或 \ 以外的字符及前面的反斜线都被解释为两个单独的字符。例如,\q 插入反斜线和字母 q。建议为转义字符指定的字符串长度不长于一个多字节字符。
FORMAT TEXT 如果选择 FORMAT TEXT(缺省值),则假定输入行为字符(由 ENCODING 选项所定义),每个输入行占一行,值由列分隔符字符串分隔。
FORMAT BCP 指定 FORMAT BCP 来装载 Adaptive Server Enterprise-generated BCP 输出文件。
FORMAT SHAPEFILE 指定 FORMAT SHAPEFILE 来装载 ESRI shapefile。此 shapefile 必须位于数据库服务器计算机上,并且必须使用 FROM filename-expression 或 USING FILE filename-expression 进行装载,其中 filename-expression 是指文件扩展名为 .shp 的 ESRI shapefile。相关联的 .shx 和 .dbf 文件必须与 .shp 文件位于同一目录中,并且具有相同的基本文件名。
对于 FORMAT SHAPEFILE,如果未指定 ENCODING 子句,则编码缺省值为 ISO-8859-1。
如果指定 FORMAT SHAPEFILE,则允许使用以下装载选项:
LOAD TABLE 语句会从您要装载的第二个列类型中获取 SRID。例如,如果您是使用类型 ST_Geometry(SRID=4326) 创建的第二列,则这些几何将使用 SRID 4326 装载。如果第二列的类型为 ST_Geometry(无显式 SRID),则这些几何将使用 SRID 0 装载。
FORMAT XML 如果指定 FORMAT XML,则允许使用以下装载选项:
如果使用 FORMAT XML,则在分析输入文件时将采用与分析使用 openxml 系统过程的查询相同的方式。SQL 语句的参数与系统过程的参数相对应,具体如下所示:
LOAD TABLE 语句子句 | openxml 系统过程参数 | 详细信息 |
---|---|---|
row-xpath | xpath | |
— | flags | 无法使用 FORMAT XML 指定与 openxml 的 flags 参数对应的值。 |
NAMESPACES | namespaces |
FORMAT XML 子句使用以下参数:
row-xpath 包含 XPath 查询的字符串或变量。XPath 允许您指定描述要查询的 XML 文档结构的模式。此参数中包含的 XPath 模式将从 XML 文档中选择节点。每个与出现在 row-xpath 参数中的 XPath 查询相匹配的节点都将在表中生成一行记录。
元属性只能在 FORMAT XML 子句的 row-xpath 参数中指定。一个元属性可在 XPath 查询中作为一个属性来访问。如果未指定 namespaces,则缺省情况下将前缀 mp 绑定到统一资源定位符(Uniform Resource Identifier,简称 URI)urn:ianywhere-com:sa-xpath-metaprop。如果已指定 namespaces,则此 URI 必须绑定到 mp 或某个其它前缀以访问查询中的元属性。元属性名称区分大小写。支持以下元属性:
@mp:id 返回一个在 XML 文档中唯一的节点的 ID。当数据库服务器重新启动后,给定文档中给定节点的 ID 可能会更改。此元属性的值按文档的顺序递增。
@mp:localname 返回节点名称中的本地部分,如果该节点没有名称则返回 NULL。
@mp:prefix 返回节点名称中的前缀部分,如果该节点没有名称或名称没有前缀则返回 NULL。
@mp:namespaceuri 返回该节点所属的命名空间的 URI,如果该节点不在命名空间中则返回 NULL。
@mp:xmltext 以 XML 形式返回 XML 文档的子树。例如,当匹配了一个内部节点时,可使用此元属性来返回一个 XML 字符串,而不再是下级文本节点的连接值。
column-xpath 指定结果集的模式以及如何为结果集中的每一列找到值的字符串或变量。如果 FORMAT XML 子句表达式匹配多个节点,则只有文档顺序中的第一个节点被使用。如果该节点不是文本节点,则通过附加所有下级文本节点来获得结果。如果一个 FORMAT XML 子句表达式不与任何节点匹配,则该行的列为 NULL。
namespace 包含 XML 文档的字符串或变量。查询的作用域命名空间取自该文档的根元素。
HEXADECIMAL 子句 此子句用于指定是否将二进制值读取为十六进制值。缺省情况下,HEXADECIMAL 为 ON。当 HEXADECIMAL 为 ON 时,二进制列值显示为 0xnnnnnn...,其中 0x 是零后面跟一个 x,每个 n 都是一个十六进制数字。处理多字节字符集时,使用 HEXADECIMAL ON 很重要。
HEXADECIMAL 子句只能与 FORMAT TEXT 子句配合使用。
ORDER 子句 使用此子句指定装载时是否对数据进行排序。ORDER 的缺省值为 ON。如果 ORDER 为 ON,并且声明了一个聚簇索引,则 LOAD TABLE 根据聚簇索引排序输入数据,并以相同的顺序插入行。如果要装载的数据已经排序,则应将 ORDER 设置为 OFF。
PCTFREE 子句 此子句用于指定要为每个表页保留的可用空间百分比。此设置将替换表的任何永久设置,但只限于装载过程中以及装载的数据。值 percent-free-space 是一个介于 0 至 100 之间的整数。值 0 指定每页上不留任何可用空间—每页均会填满。如果值很高,会使每行单独插入到页中。
QUOTE 子句 QUOTE 子句仅适用于 TEXT 数据;string 放置于字符串值的两边。缺省值为单引号(撇号)。
QUOTES 子句 此子句用于指定字符串是否用引号括起来。当 QUOTES 设置为 ON(缺省值)时,LOAD TABLE 语句要求将字符串用引号字符括起来。如果省略了 QUOTES 子句,则引号字符可以为撇号(单引号)或引号(双引号),并且字符串中出现的第一个此类字符将被视为该字符串的引号字符。字符串必须以匹配的引号结束。
当 QUOTES 设置为 ON 时,列分隔符字符串可以包含在列值中。另外,假定引号字符不属于该值的一部分。因此,尽管地址中出现了逗号,以下行也会被视为两个值(而不是三个值)。此外,将地址引起来的引号不会插入到数据库中。
'123 High Street, Anytown',(715)398-2354 |
当 QUOTES 设置为 ON 时,要在值中包括引号字符,必须使用两个引号。以下这个行在第三列中包括一个单引号字符值:
'123 High Street, Anytown','(715)398-2354','''' |
ROW DELIMITED BY 子句
此子句用于指定表示输入记录结束的字符串。缺省分隔符字符串是换行符 (\n);但是它可以是任何长度在 255 字节之内的字符串(如 ROW DELIMITED BY '###'
)。如果您要指定以制表符分隔的值,可使用制表符 (9) 的十六进制转义序列,ROW DELIMITED BY '\x09'
。如果分隔符字符串包含 \n,则它与 \r\n 或 \n 匹配。
SKIP 子句 此子句用于指定是否忽略文件开始位置的行。integer 参数指定要跳过的行数。例如,可以用此子句跳过包含列标题的行。如果行分隔符不是缺省值(换行符),则当数据包含嵌入在带引号的字符串中的行分隔符时,此跳过功能可能无法正常工作。
STRIP 子句 此子句用于指定在插入无引号值之前,是否应去除这些值的前导或尾随空白。STRIP 选项接受以下选项:
STRIP OFF 不去除前导空白或尾随空白。
STRIP LTRIM 去除前导空白。
STRIP RTRIM 去除尾随空白。
STRIP BOTH 去除前导空白和尾随空白。
STRIP ON 不建议使用。等效于 STRIP RTRIM。
STRIP 的行为与 QUOTES 子句密切相关。如果指定 QUOTES OFF,则 STRIP OFF、STRIP LTRIM、STRIP RTRIM 和 STRIP BOTH 将完全按照它们字面上所表达的意思工作。如果不指定 QUOTES 子句或指定 QUOTES ON,则无引号字符串将始终向左和向右修整(但是如果您不希望字符串向右修整,可以指定 STRIP OFF 或 STRIP LTRIM)。
WITH CHECKPOINT 子句 此子句用于指定是否执行检查点。缺省设置为 OFF。如果将此子句设置为 ON,则会在成功完成并记录语句之后执行检查点操作。如果此子句设置为 ON,而且在发出检查点前数据库需要自动恢复,则必须具有用来装载表的数据文件才能成功完成恢复(如果您使用 FILE NAME LOGGING)。如果指定了 WITH CHECKPOINT ON,并且此后需要恢复,则恢复在检查点之后开始,并且不必存在数据文件。
如果数据库损坏,需要使用备份并应用当前的日志文件,则无论此子句的设置情况如何,都需要数据文件(如果您使用 FILE NAME LOGGING)。
WITH { FILE NAME | ROW | CONTENT } LOGGING 此子句用于控制装载操作期间记录到事务日志的信息的详细程度。记录级别如下:
WITH FILE NAME LOGGING 子句 WITH FILE NAME LOGGING 子句使在事务日志中只记录 LOAD TABLE 语句。为保证恢复期间使用事务日志时的结果一致,原始装载操作时所使用的文件必须位于其原始位置,并且必须包含原始数据。此记录级别具备最佳性能,然而如果数据库参与镜像或同步,则不应使用此级别。此外,从表达式或客户端文件装载数据时也不能使用此级别。
如果没有在 LOAD TABLE 语句中指定记录级别,则指定以下内容时 WITH ROW LOGGING 将为缺省级别:
WITH ROW LOGGING 子句 WITH ROW LOGGING 子句使每个装载的行在事务日志中都作为 INSERT 语句来记录。建议对参与同步的数据库使用此记录级别;使用 FROM filename-expression 或 USING FILE filename-expression 时,此记录级别是数据库镜像的缺省值。然而,当装载大量数据时,此记录类型可能会影响性能,并导致事务日志过长。
如果不存在非确定性值,WITH CONTENT LOGGING 可能会使性能提高。
对于要装入的表中包含非确定性值(例如计算列)或 CURRENT TIMESTAMP 缺省值的数据库,这种级别最为理想。
WITH CONTENT LOGGING 子句 WITH CONTENT LOGGING 子句可使数据库服务器将输入文件以块的形式复制到事务日志中。这些块随后(例如在从事务日志恢复数据时)可被重组到输入文件的副本中。装载大量数据时,此记录类型对性能影响非常小,并且能提供更完善的数据保护,只是会导致事务日志较长。建议对参与镜像的数据库使用此记录级别,或在不需要维护原始数据文件用于以后恢复的情况下使用(假设不存在非确定性值)。
如果数据库参与同步,则不能使用 WITH CONTENT LOGGING 子句。如果要从客户端文件装载表,则需要 WITH CONTENT LOGGING 子句。
如果没有在 LOAD TABLE 语句中指定记录级别,则指定以下内容时 WITH CONTENT LOGGING 将为缺省级别:
USING CLIENT FILE client-filename-expression
USING VALUE value-expression
USING COLUMN column-expression
statistics-limitation-option 用于限制在 LOAD TABLE 执行期间生成统计信息的列。否则,将生成所有列的统计信息。只应在确认在某些列上不使用统计信息后才使用此子句。可以指定 ON ALL COLUMNS(缺省值)、OFF、ON KEY COLUMNS 或为其生成统计信息的列列表。
LOAD TABLE 允许执行从文件到数据库表的高效的大量插入。LOAD TABLE 比 Interactive SQL 语句 INPUT 更有效率。
LOAD TABLE 对整个表进行写锁定。对于基表、全局临时表和本地临时表,会执行提交操作。
如果试图对构建了快速文本索引的表或快速视图所引用的表使用 LOAD TABLE,则装载会失败。对于非快速文本索引或实例化视图则不会出现这种情况;但强烈建议您先截断相关索引和实例化视图中的数据,再执行 LOAD TABLE 语句,然后刷新索引和视图。
不要在创建时已指定 ON COMMIT DELETE ROWS 的临时表上使用 LOAD TABLE 语句(无论 ON COMMIT DELETE ROWS 是显式指定的,还是在缺省情况下指定的)。不过,如果已指定 ON COMMIT PRESERVE ROWS 或 NOT TRANSACTIONAL,则可以 使用 LOAD TABLE。
使用 FORMAT TEXT 时,不指定任何值就表示 NULL。例如,如果需要三个值且文件包含 1,,'Fred',
,则所插入的值为 1、NULL 和 Fred。如果文件包含 1,2,
,则会插入值 1、2 和 NULL。仅由空格组成的值也被视为 NULL 值。例如,如果文件包含 1, ,'Fred',
,则会插入值 1、NULL 和 Fred。所有其它值均被视为非 NULL。例如 ''(单引号后跟单引号)是一个空字符串。'NULL' 是一个包含四个字母的字符串。
如果由 LOAD TABLE 装载的列不允许使用 NULL 值,且文件值为 NULL,则会为数字列赋予值 0(零),为字符列赋予空字符串 ('')。如果由 LOAD TABLE 装载的列允许使用 NULL 值,且文件值为 NULL,则列值将为 NULL(对于所有类型)。
如果表包含 a、b 和 c 三列,输入数据包含 a、b 和 c,而 LOAD 语句仅指定 a 和 b 列作为要将数据装入的列,则会向 c 列插入以下值:
如果将 DEFAULTS 指定为 ON 并且 c 列具有缺省值,则使用该缺省值。
如果没有为 c 列定义缺省值,但该列允许 NULL,则使用 NULL。
如果没有为 c 列定义缺省值,且该列不允许 NULL,则使用零 (0) 或空字符串 (''),或者返回错误,这要根据列的数据类型而定。
LOAD TABLE 和数据库镜像 如果正在使用数据库镜像并在基表上执行 LOAD TABLE 语句,则必须指定 WITH ROW LOGGING 或 WITH CONTENT LOGGING 作为语句的记录级别。这些子句允许将装载的数据记录在事务日志中,以便也将数据装载到镜像数据库中。如果不指定这些语句,则报告错误。
LOAD TABLE 和列统计信息 为了创建表列的直方图,LOAD TABLE 在装载数据时捕获列统计信息。优化程序会使用此直方图。
以下是有关装载和列统计信息的其它提示:
LOAD TABLE 保存基表的统计信息以备将来使用。它不保存全局临时表的统计信息。
如果要向以前可能包含数据的空表中装载,在执行 LOAD TABLE 语句前删除列的统计信息可能会有益处。
如果对列执行 LOAD TABLE 时存在列统计信息,将不 会重新计算该列的统计信息。相反,会将新数据的统计信息插入到现有统计信息中。这意味着如果现有列的统计信息已过期,它们在新数据装载到该列后将仍处于过期状态。如果怀疑列统计信息已过期,应该考虑在执行 LOAD TABLE 语句之前或之后更新它们。
只有在表具有五个或更多的行时,LOAD TABLE 才会添加统计信息。如果表至少具有五个行,则按如下方式修改直方图:
数据是否已在表中? | 是否存在直方图? | 采取的操作 |
---|---|---|
是 | 是 | 将更改集成到现有直方图 |
是 | 否 | 不生成直方图 |
否 | 是 | 将更改集成到现有直方图 |
否 | 否 | 建立新的直方图 |
对于超过 90% 的上载行,LOAD TABLE 不为包含 NULL 值的列生成统计信息。
使用动态构造的文件名 通过向变量指派文件名,然后在 LOAD TABLE 语句中使用该变量名,可以使用该动态构造的文件名执行 LOAD TABLE 语句。
执行 LOAD TABLE 语句所需的权限取决于数据库服务器的 -gl 选项,如下所示:
如果 -gl 选项设置为 ALL,则您必须是表的所有者,或者具有 DBA 权限或 ALTER 特权。
如果 -gl 选项设置为 DBA,则您必须具有 DBA 权限。
如果 -gl 选项设置为 NONE,则不允许执行 LOAD TABLE。
表需要有独占锁。
从客户端计算机上的文件读取时:
需要 READCLIENTFILE 权限。
需要具有对从中读取的目录的读取权限。
必须启用 allow_read_client_file 数据库选项。
必须启用 read_client_file 受保护的功能。
自动提交。
只有在指定 WITH ROW LOGGING 子句后,插入才会被记录在事物日志文件中,因此,系统失败时可能无法恢复已插入的行,具体取决于记录类型。如果需要恢复这些行,则需要提供原始文件并需要使用 WITH FILE NAME LOGGING。此外,在用作 MobiLink 客户端的数据库中或在 SQL Remote 复制时所涉及的数据库中,必须使用带有 WITH ROW LOGGING 子句的 LOAD TABLE 语句,因为这些技术会通过分析日志文件来复制更改。
LOAD TABLE 语句不触发与表关联的任何触发器。
操作开始时会执行检查点操作。如果指定了 WITH CHECKPOINT ON,在结束时会执行第二个检查点。
如果装载了大量数据,则更新列统计信息。
SQL/2008 服务商扩充。
以下是 LOAD TABLE 的示例。首先,创建一个表,然后使用名为 input.txt 的文件将数据装载到表中。
CREATE TABLE t( a CHAR(100), let_me_default INT DEFAULT 1, c CHAR(100) ); |
以下是名为 input.txt 的文件的内容:
ignore_me, this_is_for_column_c, this_is_for_column_a |
以下 LOAD 语句装载名为 input.txt 的文件:
LOAD TABLE T ( filler(), c, a ) FROM 'input.txt' FORMAT TEXT DEFAULTS ON; |
命令 SELECT * FROM t
生成结果集:
a | let_me_default | c |
---|---|---|
this_is_for_column_a | 1 | this_is_for_column_c |
以下示例使用动态构造的文件名通过 EXECUTE IMMEDIATE 语句执行 LOAD TABLE 语句:
CREATE PROCEDURE LoadData( IN from_file LONG VARCHAR ) BEGIN DECLARE path LONG VARCHAR; SET path = 'd:\\data\\' || from_file; LOAD TABLE MyTable FROM path; END; |
以下示例将 UTF-8 编码的表数据装载到 mytable 中:
LOAD TABLE mytable FROM 'mytable_data_in_utf8.dat' ENCODING 'UTF-8'; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |