远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为SAP IQ 16.0 SP03中文版:

  1. SAP Sybase IQ 简介
  2. 新功能摘要
  3. IQ 发行公告(linux)
  4. IQ 快速入门(unix)
  5. 安装和配置指南(linux)
  6. 管理:备份、恢复和数据恢复
  7. 管理:数据库
  8. SAP Sybase IQ 错误消息
  9. 管理:全球化
  10. IQ 许可选项指南
  11. 管理:装载管理
  12. IQ 迁移
  13. 管理:Multiplex
  14. 性能和调优指南
  15. IQ 编程
  16. 参考:构件块、表和过程
  17. 参考:语句和选项
  18. 管理:内存行级版本控制
  19. 管理:空间数据
  20. IQ 非结构化数据分析
  21. 用户定义的函数
  22. 管理:用户管理和安全
  23. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

LOAD TABLE 语句

将数据从外部文件导入数据库表。 快速链接:

转至参数 (第 365 页) 转至示例 (第 375 页) 转至用法 (第 377 页) 转至标准 (第 380 页) 转至权限 (第 380 页)


语法

image

[ INTO ] TABLE [ owner.]table-name

... ( load-specification [, ] )

... { FROM | USING [ CLIENT ] FILE }

{ 'filename-string' | filename-variable } [, ]

... [ CHECK CONSTRAINTS { ON | OFF } ]

... [ DEFAULTS { ON | OFF } ]

... [ QUOTES OFF ]

... ESCAPES OFF

... [ FORMAT { ascii | binary | bcp } ]

... [ DELIMITED BY 'string' ]

... [ STRIP { OFF | RTRIM } ]

... [ WITH CHECKPOINT { ON | OFF } ]

... [ BYTE ORDER { NATIVE | HIGH | LOW } ]

... [ LIMIT number-of-rows ]

... [ NOTIFY number-of-rows ]

... [ ON FILE ERROR { ROLLBACK | FINISH | CONTINUE } ]

... [ PREVIEW { ON | OFF } ]

... [ ROW DELIMITED BY 'delimiter-string' ]

... [ SKIP number-of-rows ]

... [ HEADER SKIP number [ HEADER DELIMITED BY 'string' ] ]

... [ WORD SKIP number ]

... [ ON PARTIAL INPUT ROW { ROLLBACK | CONTINUE } ]

... [ IGNORE CONSTRAINT constraint-type [, ] ]


image

... [ MESSAGE LOG stringROW LOG string[ ONLY LOG log-what

[, ] ]

... [ LOG DELIMITED BY string]


load-specification - (back to Syntax)

{ column-name [ column-spec ]

| FILLER ( filler-type ) }


column-spec - (back to load-specification)

{ ASCII ( input-width )

| BINARY [ WITH NULL BYTE ]

| PREFIX { 1 | 2 | 4 }

| 'delimiter-string'

| DATE ( input-date-format )

| DATETIME ( input-datetime-format )

| ENCRYPTED ( data-type key-string[, algorithm-string] )

| DEFAULT default-value }

[ NULL ( { BLANKS | ZEROS | 'literal', } )


filler-type - (back to load-specification)

{ input-width

| PREFIX { 1 | 2 | 4 }

| 'delimiter-string'

}


constraint-type - (back to Syntax)

{ CHECK integer

| UNIQUE integer

| NULL integer

| FOREIGN KEYinteger

| DATA VALUE integer

| ALL integer

}


log-what - (back to Syntax)

{ CHECK

| ALL

| NULL

| UNIQUE

| DATA VALUE

| FOREIGN KEY

| WORD

}


参数

(返回顶部) (第 364 页)

FROM – 标识要从中装载数据的一个或多个文件。要指定多个文件,请使用逗号 分隔每个 filename-stringfilename-string 以字符串形式传递到服务器。因 此,该字符串遵循的格式要求与其它 SQL 字符串相同。

要在 Windows 系统中指示目录路径,反斜杠字符 \ 必须用两个反斜杠来表示。因 此,要将文件 c:\temp\input.dat 中的数据装载到 Employees 表的语句是:


image

LOAD TABLE Employees

FROM 'c:\\temp\\input.dat' ...

路径名相对于数据库服务器,而不是客户端应用程序。如果在其它某台计算机的 数据库服务器上运行此语句,则目录名是指服务器计算机上的目录,而不是客户 端计算机上的目录。装载 Multiplex 数据库时,请在所有文件名中使用绝对(完全 限定)路径。请不要使用相对路径名。

由于受资源限制的影响,SAP Sybase IQ 无法保证能够装载所有数据。如果资源分 配失败,整个装载事务将被回退。一次读取一个文件,并按 FROM 子句中指定的 顺序处理这些文件。任何 SKIP LIMIT 值都只在装载开始时应用,而不是针对 每个文件应用。

现已不建议使用 LOAD TABLE FROM 子句,但可使用该子句指定服务器上存在 的文件。此示例从客户端计算机上的文件 a.inp 装载数据。

image

LOAD TABLE t1(c1,c2,filler(30))

USING CLIENT FILE 'c:\\client-data\\a.inp' QUOTES OFF ESCAPES OFF

IGNORE CONSTRAINT UNIQUE 0, NULL 0

MESSAGE LOG 'c:\\client-data\\m.log' ROW LOG 'c:\\client-data\\r.log'

ONLY LOG UNIQUE

USING USING FILE 从服务器装载一个或多个文件。该子句的作用等同于指定 FROM filename 子句。USING CLIENT FILE 从客户端批量装载一个或多个文件。 客户端上文件的字符集必须与服务器归类相同。SAP Sybase IQ 将依次处理文件列 表中的文件。每个文件在处理时将锁定为读取模式,然后解锁。客户端批量装载 不会产生任何管理开销,例如额外的磁盘空间以及内存或网络监控守护程序需求, 但会强制对每个文件进行单线程处理。

批量装载大对象时,USING CLIENT FILE 子句同时适用于主文件和辅助文件。

LOAD TABLE 语句只能装载 gzip 格式的压缩客户端和服务器文件。扩展名为 ".gz" ".gzip" 的所有文件都视为压缩文件。装载压缩文件时不支持命名管道或辅助文件。 压缩文件和未压缩文件可以在同一 LOAD TABLE 语句中指定。装载中的每个压缩 文件都由一个线程进行处理。

在客户端装载过程中,将在客户端主机上创建 IGNORE CONSTRAINT 日志文件, 创建日志文件过程中出现的任何错误都会导致操作回退。

客户端批量装载受使用命令序列协议的 Interactive SQL ODBC/JDBC 客户端支 持。使用 TDS 协议的客户端则不支持。为了确保网络数据安全,请使用“传送层 安全性”。要控制谁能够使用客户端批量装载,请使用安全功能 (-sf) 服务器启动 开关、ALLOW_READ_CLIENT_FILE 数据库选项和/READCLIENTFILE 访问控 制。

CHECK CONSTRAINTS – 对检查约束进行评估,即,可忽略或记录。CHECK CONSTRAINTS 缺省设置为 ON


设置 CHECK CONSTRAINTS OFF 将导致 SAP Sybase IQ 忽略所有检查约束违规。 例如,此设置在重建数据库时十分有用。如果表的检查约束调用尚未创建的用户 定义函数,则重建将失败,除非此选项设置为 OFF

此选项与以下选项互斥。如果在同一装载中指定了以下任何选项,将导致错误:

• IGNORE CONSTRAINT ALL

• IGNORE CONSTRAINT CHECK

• LOG ALL

• LOG CHECK

DEFAULTS – 使用列缺省值。缺省情况下,此选项为 ON。如果 DEFAULTS 选项为 OFF,则为列列表中未显示的列分配 NULL

DEFAULTS 选项的设置适用于所有列 DEFAULT 值,包括 AUTOINCREMENT

QUOTES – 表示输入字符串用引号字符括起来。QUOTES 是可选参数,且缺省 设置为 ON。引号字符是撇号(单引号)或引号(双引号)。字符串中出现的第 一个这样的字符将被视为该字符串的引号字符。字符串数据必须以匹配的引号结 束。

QUOTES ON 的情况下,可以在列值中包括列或行分隔符。假定前导引号字符 和结尾引号字符不是值的一部分并将其从装载的数据值中排除。

要在使用 QUOTES ON 的值中包括引号字符,必须使用两个引号。例如,此行在 第三列中包含一个单引号字符值:

image

123 High Street, Anytown, (715)398-2354,’’’’

在打开 STRIP 时(缺省情况),首先从值中去除尾随空白,然后再插入这些值。 仅去除不带引号的字符串的尾随空白。带引号的字符串保留其尾随空白。仅当设 置为 ON 时,才会剪裁前导空白或 TAB 字符。

数据抽取工具提供多个引号处理选项(TEMP_EXTRACT_QUOTESTEMP_EXTRACT_QUOTES_ALL TEMP_EXTRACT_QUOTE)。如果您计划通过缺 省 ASCII 抽取方式抽取数据以将其装载到 IQ 主存储表中,且字符串字段包含列 或行分隔符,请使用 TEMP_EXTRACT_BINARY 选项进行抽取并对 LOAD TABLE 使用 FORMAT binary QUOTES OFF 选项。

限制:

• QUOTES ON 仅适用于列分隔的 ASCII 字段。

QUOTES 设置为 ON 的情况下,列分隔符或行终结符的第一个字符不能是 单引号或双引号。

• QUOTES ON 将强制对给定文件进行单线程处理。

无论 QUOTES 选项的设置如何,都不适用于从辅助文件装载二进制大对象 (BLOB) 或字符大对象 (CLOB) 数据。前导或尾随引号将作为 CLOB 数据的一 部分来装载。使用 QUOTES ON 选项,位于引号之间的两个连续引号将作为两 个连续引号进行装载。


• Adaptive Server BCP 不支持 QUOTES 选项。拷入或拷出所有字段数据的方式 与设置 QUOTES OFF 时的情况相同。由于 QUOTES ON SAP Sybase IQ LOAD TABLE 语句的缺省设置,因此将 ASE 数据从 BCP 输出导入至 SAP Sybase IQ 表时,您必须指定 QUOTES OFF

例外情况:

如果 LOAD TABLE 在引起来的字段的结尾引号字符之后遇到任何非空白字符, 则将报告以下错误并回退装载操作:

image

Non-SPACE text found after ending quote character for an enclosed field.

SQLSTATE: QTA14 SQLCODE: -1005014L

QUOTES 设置为 ON 的情况下,如果将单引号或双引号指定为列分隔符的 第一个字符,则将报告错误并且装载操作将失败:

image

Single or double quote mark cannot be the 1st character of column delimiter or row terminator with QUOTES option ON.

SQLSTATE: QCA90 SQLCODE: -1013090L

ESCAPES – 如果省略输入字段的 column-spec 定义,则在 ESCAPES ON(缺 省值)的情况下,数据库服务器会识别跟在反斜杠字符后的字符并将其解释为特 殊字符。可以以组合形式 \n 添加换行符,以十六进制 ASCII 代码形式添加其它字 符,例如,使用 \x09 表示制表符。两个连续的反斜线字符 ( \\ ) 被解释为单个反斜 线。对于 SAP Sybase IQ,必须设置 ESCAPES OFF

FORMAT SAP Sybase IQ 支持 ASCII 和二进制输入字段。此格式通常由上述 column-spec 定义。如果省略列的此定义,则在缺省情况下,SAP Sybase IQ 使用 此选项定义的格式。假定输入行具有 ascii(缺省值)或 binary 字段,每个输入行 对应一行,并使用列分隔符来分隔各个值。

SAP Sybase IQ 也允许将 BCP 字符文件中的数据作为 LOAD TABLE 命令的输入。

使用 LOAD TABLE FORMAT BCP 语句装载到 SAP Sybase IQ 表中的 BCP 数据文 件必须利用 -c 选项以跨平台文件格式进行导出 (BCP OUT)

对于 FORMAT BCPLOAD TABLE 语句的缺省列分隔符是 <tab>,而缺省行终 结符是 <newline>

对于 FORMAT BCP,行中的最后一列必须以行终结符终止,而不能以列分隔 符终止。如果列分隔符位于行终结符之前,则将列分隔符视为数据的一部分。

装载规范中除最后一列以外的所有列中的数据只能以列分隔符进行分隔。对于 除最后一列以外的所有列,如果在列分隔符之前先遇到行终结符,则将行终结 符视为列数据的一部分。

可通过 DELIMITED BY 子句指定列分隔符。对于 FORMAT BCP,分隔符的长 度必须小于或等于 10 个字符。如果分隔符长度大于 10,则返回错误。

对于 FORMAT BCP,装载规范只能包含列名、NULL ENCRYPTED。如果 在装载规范中指定了任何其它选项,则返回错误。

例如,下列即属于有效的 LOAD TABLE 装载规范:

image

LOAD TABLE x( c1, c2 null(blanks), c3 ) FROM 'bcp_file.bcp'


image

FORMAT BCP

...

image

LOAD TABLE x( c1 encrypted(bigint,'KEY-ONE','aes'), c2, c3 ) FROM 'bcp_file.bcp'

FORMAT BCP

...

DELIMITED BY – 如果在 column-spec 定义中省略列分隔符,则缺省的列分隔符 为逗号。通过提供单个 ASCII 字符或十六进制字符表示形式可指定其它列分隔符。 DELIMITED BY 子句为:

image

... DELIMITED BY '\x09' ...

要将换行符用作分隔符,您可以指定特殊组合 '\n' 或其 ASCII '\x0a'。在 column- spec delimiter-string 中最多可指定四个字符,而在 DELIMITED BY 子句中只能指 定一个字符。

STRIP – 确定在插入不带引号的值之前是否应去除其尾随空白。LOAD TABLE 命 令接受以下 STRIP 关键字:

STRIP OFF – 不去除尾随空白。

STRIP RTRIM – 去除尾随空白。

STRIP ON – 不建议使用。使用 STRIP RTRIM

在打开 STRIP 时(缺省情况),SAP Sybase IQ 首先将从值中去除尾随空白,然 后再插入这些值。此设置仅适用于 VARCHAR 数据。STRIP OFF 会保留尾随空 白。

仅去除不带引号的字符串的尾随空白。带引号的字符串保留其尾随空白。如果不 需要区分空白,可以使用 FILLER 选项作为替代选项,以便更确切地指定要去除 的字节数,而不是去除所有尾随空格。对于 SAP Sybase IQSTRIP OFF 会更有 效,在处理尾随空白时,它会遵循 ANSI 标准。(CHAR 数据始终会进行填补,因此 STRIP 选项仅影响 VARCHAR 数据。)

STRIP 选项仅适用于长度可变的非二进制数据,不适用于 ASCII 固定宽度插入。 以下列模式为例:

image

CREATE TABLE t( c1 VARCHAR(3) );

LOAD TABLE t( c1 ',' ) ........ STRIP RTRIM // trailing blanks trimmed


LOAD TABLE t( c1 ',' ) ........ STRIP OFF // trailing blanks not trimmed


LOAD TABLE t( c1 ASCII(3) ) ... STRIP RTRIM // trailing blanks not trimmed

LOAD TABLE t( c1 ASCII(3) ) ... STRIP OFF // trailing blanks trimmed


LOAD TABLE t( c1 BINARY ) ..... STRIP RTRIM // trailing blanks trimmed


image

LOAD TABLE t( c1 BINARY ) ..... STRIP OFF // trailing blanks trimmed

始终剪裁二进制数据中的尾随空白。

WITH CHECKPOINT – 确定 SAP Sybase IQ 是否执行检查点。此选项只适用于在 SAP Sybase IQ 数据库中装载 SQL Anywhere 表。

缺省设置为 OFF。如果将此子句设置为 ON,则会在成功完成并记录语句之后执 行检查点操作。如果服务器在提交连接后及下次检查点之前出现故障,则必须具 有用来装载表的数据文件才能成功完成恢复。不过,如果指定了 WITH CHECKPOINT ON,并且此后需要恢复,则在恢复时不需要数据文件。

如果数据库损坏,需要使用备份并应用当前的日志文件,则无论此子句的设置情 况如何,都需要数据文件。

image

警告! 如果将数据库选项 CONVERSION_ERROR 设置为 OFF,则可能会将错误 的数据装载到表中而收不到任何错误报告。如果未指定 WITH CHECKPOINT ON, 并且需要恢复数据库,则当恢复过程中 CONVERSION_ERROR 设置为 ON(缺省 值)时,恢复可能失败。建议您不要在 CONVERSION_ERROR 设置为 OFF 且未 指定 WITH CHECKPOINT ON 的情况下装载表。

另请参见 CONVERSION_ERROR 选项 [TSQL]

image

BYTE ORDER – 指定读取时的字节顺序。此选项适用于所有二进制输入字段。 如果未定义,则此选项将被忽略。SAP Sybase IQ 始终以其所在计算机的本机格式 读取二进制数据(缺省值为 NATIVE)。您还可以指定:

• HIGH,当多字节数量以高位字节优先时(对于 SunIBM AIX HP big endian 平台而言)。

• LOW,当多字节数量以低位字节优先时(对于 Windows little endian 平台而 言)。

LIMIT – 指定要插入表中的最大行数。缺省值为 0,表示无限制。最大值为 231 - 1

(2147483647) 行。

NOTIFY – 指定每次在表中成功插入指定行数时将发送消息通知您。缺省值为 0, 表示不打印任何通知。此选项的值将覆盖 NOTIFY_MODULUS 数据库选项的值。

ON FILE ERROR – 指定 SAP Sybase IQ 在因输入文件不存在或没有读取该文件 的正确权限而无法打开文件时应执行的操作。您可以指定以下其中一个操作:

ROLLBACK – 中止整个事务(缺省设置)。

FINISH – 结束已完成的插入操作并终止装载操作。

CONTINUE – 返回错误,但只是跳过该文件,然后继续执行装载操作。 只允许有一个 ON FILE ERROR 子句。


PREVIEW – 显示目标表中输入的布局,包括每列的起始位置、名称和数据类 型。SAP Sybase IQ 将在装载过程开始时显示此信息。如果写入日志文件,此信息 也会包含在日志中。

ROW DELIMITED BY delimiter-string – 指定最大长度 4 字节的字符串,以指示 输入记录的结尾。仅当行中的所有字段为以下任意一种情形时才能使用此选项:

由列终结符分隔

通过 DATE DATETIME column-spec 选项定义数据

• ASCII 固定长度字段

始终包含 ROW DELIMITED BY 以确保进行并行装载。从 LOAD 规范中删除此子 句可能会导致 SAP Sybase IQ 以串行方式而非并行方式进行装载。

如果任何输入字段包含二进制数据,则无法使用此选项。使用此选项,行终结符 将使任何缺失字段设置为 NULL。所有行均必须具有相同的行分隔符,并且必须 区别于所有列分隔符。行分隔符字符串和字段分隔符字符串彼此不能为初始子集。 例如,不能指定 "*" 作为字段分隔符并指定 "*#" 作为行分隔符,但可以与该行分 隔符一起指定 "#" 作为字段分隔符。

如果行缺少分隔符,则 SAP Sybase IQ 会返回错误并回退整个装载事务。唯一一 种例外情况是文件的最后一条记录,系统会回退该行并返回警告消息。在 Windows 上,通常由换行符后跟回车符表示行分隔符。对于此选项或 FILLER,您可能需要 将此指定为 delimiter-string(见以上说明)。

SKIP – 定义此装载要在输入表开头跳过的行数。要跳过的最大行数为 231 - 1 (2147483647)。缺省值为 0SKIP 在读取要跳过的行时以单线程模式运行。

HEADER SKIPHEADER DELIMITED BY – 指定 LOAD TABLE 要在数据文件 开头跳过的行数,其中包括标题行。在跳过指定的行数之前,将忽略所有的 LOAD TABLE 列规范及其它装载选项。

要跳过的行数大于或等于零。

行由 HEADER DELIMITED BY 子句中指定的长度为 1 4 个字符的分隔符字 符串确定。缺省的 HEADER DELIMITED BY 字符串为 '\n' 字符。

• HEADER DELIMITED BY 字符串的最大长度为四个字符。如果字符串长度大于 4 或小于 1,将返回错误。

如果指定了非零 HEADER SKIP 值,则会忽略包含 HEADER DELIMITED BY 分隔符的所有数据,直到分隔符的出现次数达到 HEADER SKIP 子句中指定的 次数。

在跳过指定的行数之前,将忽略所有的 LOAD TABLE 列规范及其它装载选项。 在跳过指定的行数后,LOAD TABLE 列规范及其它装载选项将应用于剩余数 据。

仅忽略数据开头处的“标题”字节。如果在 USING 子句中指定了多个文件, HEADER SKIP 将只忽略从第一个文件的第一行开始的数据,直到跳过指定的


标题行数,即使这些行位于后面的文件中。LOAD TABLE 在开始解析实际数据 后便不会寻找标题。

如果 LOAD TABLE 在跳过 HEADER SKIP 指定的行数之前处理所有输入数据, 则不会报告错误。

WORD SKIP – 遇到长度超过创建字索引时所指定限制的数据时,允许装载继续 进行。

如果因字超过最大允许大小而未能装载某一行,则会向 .iqmsg 文件写入一条警 告。还可以选择将 WORD 大小违规记录到 MESSAGE LOG 文件中,并将被拒绝 的行记录到 LOAD TABLE 语句中指定的 ROW LOG 文件。

如果未指定此选项,则 LOAD TABLE 将在第一次遇到长度超过指定限制的字时 报告错误并回退。

number 指定忽略“字不能超过允许的最大字长度”错误的次数。

• 0(零)表示没有限制。

ON PARTIAL INPUT ROW – 指定在装载期间遇到部分输入行时执行的操作。 您可以指定以下其中一个操作:

• CONTINUE 发出警告并继续执行装载操作。这是缺省设置。

• ROLLBACK 中止整个装载操作并报告错误。

image

Partial input record skipped at EOF. SQLSTATE: QDC32 SQLSTATE: -1000232L

IGNORE CONSTRAINT – 指定是否忽略装载期间发生的 CHECKUNIQUENULLDATA VALUE FOREIGN KEY 完整性约束违规,以及在启动回退之前 忽略的最大违规次数。指定每个 constrainttype 都具有以下结果:

CHECK limit – 如果 limit 指定为零,则将要忽略的 CHECK 约束违规次数将 无限制。如果未指定 CHECK,则首次发生任何 CHECK 约束违规时都将导致 LOAD 语句回退。如果 limit 为非零,则发生 limit +1 CHECK 约束违规后将 导致装载回退。

UNIQUE limit – 如果 limit 指定为零,则要忽略的 UNIQUE 约束违规次数将 无限制。如果 limit 为非零,则发生 limit +1 UNIQUE 约束违规后将导致装 载回退。

NULL limit – 如果 limit 指定为零,则要忽略的 NULL 约束违规次数将无限 制。如果 limit 为非零,则发生 limit +1 NULL 约束违规后将导致装载回退。

FOREIGN KEY limit – 如果 limit 指定为零,则要忽略的 FOREIGN KEY 约 束违规次数将无限制。如果 limit 为非零,则发生 limit +1 FOREIGN KEY 约 束违规后将导致装载回退。

DATA VALUE limit – 如果数据库选项 CONVERSION_ERROR ON,则将 报告错误并回退语句。如果 limit 指定为零,则要忽略的 DATA VALUE 约束违 规(数据类型转换错误)次数将无限制。如果 limit 为非零,则发生 limit +1 DATA VALUE 约束违规后将导致装载回退。

ALL limit – 如果数据库选项为 CONVERSION_ERROR = ON,则将报告错误 并回退语句。如果 limit 指定为零,则要忽略的所有完整性约束违规的累计总


数将无限制。如果 limit 为非零,则在忽略的所有 UNIQUENULLDATA VALUE FOREIGN KEY 完整性约束违规累计总数超过 limit 值时,装载将回 退。例如,可指定此 IGNORE CONSTRAINT 选项:

image

IGNORE CONSTRAINT NULL 50, UNIQUE 100, ALL 200


完整性约束违规的总数不能超过 200,而 NULL UNIQUE 约束违规的总数 分别不能超过 50 100。只要超出这些限制中的任何一个,LOAD TABLE 语 句便会回退。

image

注意: 单个行可具有多个完整性约束违规。每出现一次完整性约束违规便计 一次,直至达到该类违规的限定值。

如果要记录忽略的完整性约束违规,可将 IGNORE CONSTRAINT 选项限制设 置为非零值。记录过多的违规数会影响装载性能

image

如果在 IGNORE CONSTRAINT 子句中未指定 CHECKUNIQUENULL

FOREIGN KEY,则在第一次发生上述其中一种完整性约束违规时,装载将回退。

如果未在 IGNORE CONSTRAINT 子句中指定 DATA VALUE,则当首次发生这种 类型的完整性约束违规时,将回退装载,但如果数据库选项为 CONVERSION_ERROR = OFF 则例外。如果为 CONVERSION_ERROR = OFF

则对于任何 DATA VALUE 约束违规,都将发出警告并继续装载。

装载完成时,将在 .iqmsg 文件中记录一条与完整性约束违规有关的信息性消息。 此消息包含装载时发生的完整性约束违规次数及跳过的行数。

MESSAGE LOG – 指定要在其中记录完整性约束违规和要记录的违规类型信息 的文件的名称。表示装载开始和完成的时间戳记录在 MESSAGE LOG ROW LOG 文件中。必须指定 MESSAGE LOG ROW LOG,否则将不记录与完整性违规有 关的信息。

如果未指定 ONLY LOG 子句,则不会记录有关完整性约束违规的信息。而是 只记录表示装载开始和完成的时间戳。

对于 ONLY LOG 子句中指定的所有完整性约束类型违规,或在指定关键字 WORD 情况下的所有字索引长度违规,将记录相关违规信息。

如果记录约束违规,则每次发生完整性约束违规时,将在 MESSAGE LOG 文 件中生成一行信息。

由于装载是由并行运行的多个线程执行的,MESSAGE LOG 文件中的行数(报 告的错误)可能会超出 IGNORE CONSTRAINT 选项限制。可能会有多个线程 报告约束违规次数超出指定限值。

如果记录约束违规,则对于某一给定行,将在 ROW LOG 文件中记录一行信 息,而不考虑该行发生的完整性约束违规次数。

MESSAGE LOG 文件中的不同错误数可能与 ROW LOG 文件中的行数不完全 匹配。行数差是由于 MESSAGE LOG 的上述并行装载处理造成的。

• MESSAGE LOG ROW LOG 文件不能为原始分区或命名管道。


如果已存在 MESSAGE LOG ROW LOG 文件,则会将新信息附加到相应文 件。

MESSAGE LOG ROW LOG 文件指定无效文件名将产生错误。

MESSAGE LOG ROW LOG 文件指定相同的文件名将产生错误。

IGNORE CONSTRAINT MESSAGE LOG 选项的各种组合会导致不同的记录操 作。


5. LOAD TABLE 记录操作


是否已指定 IGNORE CONSTRAINT

是否已指定 MESSAGE LOG

操作

回退之前,将记录所有被忽略的完整性约 束违规(包括用户指定的限制)。

回退之前,将记录第一次完整性约束违 规。

不记录任何信息。

不记录任何信息。第一次发生完整性约束 违规即会导致回退。


image

提示: 如果要记录忽略的完整性约束违规,可将 IGNORE CONSTRAINT 选项限

制设置为非零值。如果单行出现多次完整性约束违规,则将针对每次违规在

MESSAGE LOG 文件中写入一行。记录过多的违规数会影响装载性能。

image

LOG DELIMITED BY – 指定 ROW LOG 文件中各数据值之间的分隔符。缺省分 隔符为逗号。

FORMAT BCP 指定为 LOAD TABLE 子句时,SAP Sybase IQ 不再返回错误消 息。此外,会验证以下情况,并返回相应的错误消息

如果指定的装载格式不是 ASCIIBINARY BCPSAP Sybase IQ 会返回消 息“LOAD 格式仅支持 ASCIIBCP BINARY。”

如果 LOAD TABLE 列规范包含除列名、NULL ENCRYPTED 以外的任何内 容,SAP Sybase IQ 会返回错误消息“LOAD ... FORMAT BCP 的装载说明 无效。”

如果 FORMAT BCP 装载的列分隔符或行终结符的大小超过 10 个字符,SAP Sybase IQ 会返回消息“分隔符 '%2' 的长度必须为 1 %3 个字符。”

(其中 %3 等于 10)。

对于 FORMAT BCP FORMAT ASCII 出现的错误或警告情况,与这些情况相 对应的消息对于两种格式而言都是相同的。


如果指定的装载缺省值为 AUTOINCREMENTIDENTITY GLOBAL AUTOINCREMENTSAP Sybase IQ 会返回错误“缺省值 %2 不能用作 LOAD 缺省值。%1

如果 LOAD TABLE 规范不包含需要从指定文件装载的任何列,SAP Sybase IQ 会返回错误“LOAD 语句必须至少包含要从输入文件中装载的 1 列。”并回退 LOAD TABLE 语句。

如果装载超出了具有 TEXT 索引的文本文档的最大词语数限制,SAP Sybase IQ 会返回错误“文本文档超出最大词语数。每个文档最多支持 4294967295 个 词语。”


示例

(返回顶部) (第 364 页)

示例 1 – 将数据从一个文件装载到 Windows 系统上的 Products 表中。使用制 表符作为列分隔符,后跟 Description Color 列:

image

LOAD TABLE Products ( ID ASCII(6), FILLER(1),

Name ASCII(15), FILLER(1),

Description '\x09', Size ASCII(2), FILLER(1),

Color '\x09', Quantity PREFIX 2,

UnitPrice PREFIX 2, FILLER(2) )

FROM 'C:\\mydata\\source1.dmp' QUOTES OFF

ESCAPES OFF BYTE ORDER LOW NOTIFY 1000

示例 2 – 从客户端计算机上的文件 a.inp 装载数据:

image

LOAD TABLE t1(c1,c2,filler(30))

USING CLIENT FILE 'c:\\client-data\\a.inp' QUOTES OFF ESCAPES OFF

IGNORE CONSTRAINT UNIQUE 0, NULL 0

MESSAGE LOG 'c:\\client-data\\m.log'

ROW LOG 'c:\\client-data\\r.log'ONLY LOG UNIQUE

示例 3 – 将数据从两个文件装载到 UNIX 系统上的 product_new 表中(该表允许

NULL 值)。制表符为缺省的列分隔符,并且使用换行符作为行分隔符:

image

LOAD TABLE product_new ( id,

name, description, size,

color '\x09' NULL( 'null', 'none', 'na' ),


image

quantity PREFIX 2, unit_price PREFIX 2 )

FROM '/s1/mydata/source2.dump', '/s1/mydata/source3.dump'

QUOTES OFF ESCAPES OFF

FORMAT ascii DELIMITED BY '\x09'

ON FILE ERROR CONTINUE ROW DELIMITED BY '\n'

示例 4 – 忽略 10 字长度违规;出现第 11 个字时,配置新错误并回退装载:

image

load table PTAB1(

ck1 ',' null ('NULL') ,

ck3fk2c2 ',' null ('NULL') ,

ck4 ',' null ('NULL') ,

ck5 ',' null ('NULL') ,

ck6c1 ',' null ('NULL') ,

ck6c2 ',' null ('NULL') ,

rid ',' null ('NULL') ) FROM 'ri_index_selfRI.inp'

row delimited by '\n' LIMIT 14 SKIP 10

IGNORE CONSTRAINT UNIQUE 2, FOREIGN KEY 8

word skip 10 quotes off escapes off strip off

示例 5 – 使用 FORMAT BCP 装载选项将数据从 BCP 字符文件 bcp_file.bcp 装 载到表 t1

image

LOAD TABLE t1 (c1, c2, c3)

FROM bcp_file.bcp

FORMAT BCP

...

示例 6 – 使用 DEFAULT 装载选项将缺省值 12345 装载到 c1,从 LoadConst04.dat 文件向 c2 c3 装载数据:

image

LOAD TABLE t1 (c1 DEFAULT 12345 , c2, c3, filler(1))

FROM LoadConst04.dat

STRIP OFF QUOTES OFF ESCAPES OFF

DELIMITED BY ,;

示例 7 – 使用 FORMAT BCP 装载选项从文件 bcp_file.bcp c1 c2 装载数 据,并将 c3 的值设置为 10

image

LOAD TABLE t1 (c1, c2, c3 DEFAULT 10)

FROM bcp_file.bcp

FORMAT BCP QUOTES OFF ESCAPES OFF;

示例 8 – 以下代码段会忽略数据文件开头处用 '&&' 分隔的一个标题行:


image

LOAD TABLE

...HEADER SKIP 1 HEADER DELIMITED by '&&'

示例 9 – 以下代码段会忽略数据文件开头处用 '\n' 分隔的 2 个标题行:

image

LOAD TABLE

...HEADER SKIP 2

示例 10 – 将文件装载到启用 RLV 的表中。

使用 FORMAT BCP 装载选项将数据从 BCP 字符文件 bcp_file.bcp 装载到启用

RLV 的表 rvt1 中:

image

LOAD TABLE rvt1 (c1, c2, c3)

FROM bcp_file.bcp

FORMAT BCP

...


用法

(返回顶部) (第 364 页)

LOAD TABLE 允许执行从带有 ASCII 或二进制数据的文件到数据库表的高效的大量插 入。

使用 LOAD TABLE 选项也可以控制违反完整性约束时的装载行为并且记录有关违规的 信息。

对临时表可以使用 LOAD TABLE,但是该临时表必须是用 ON COMMIT PRESERVE ROWS

声明的,否则下一条 COMMIT 将删除已装载的行。 LOAD TABLE 支持装载大对象 (LOB) 数据。

SAP Sybase IQ 支持从 ASCII 和二进制数据装载,并且支持固定长度格式和可变长度 格式。要处理所有这些格式,您必须提供一个 load-specification 来通知 SAP Sybase IQ 需要从源文件中的每个“列”或字段获得何种数据。可通过 column-spec 定义下列格 式:

具有固定字节长度的 ASCIIinput-width 值是表示每条记录中输入字段的固定宽 度的整数(单位为字节)。

使用一定数量的 PREFIX 字节(12 4)指定输入长度的二进制或非二进制字 段。

以下两部分与 PREFIX 子句相关:

前缀值 – 始终为二进制值。

关联数据字节 – 始终为字符格式,永远不采用二进制格式。 如果使用抽取工具卸载数据时将 TEMP_EXTRACT_BINARY 选项设置为 ON,则在 装载二进制数据时必须针对每个列使用 BINARY WITH NULL BYTE 参数。

由分隔符分隔的可变长度字符。可以将终结符指定为十六进制 ASCII 字符。 delimiter-string 可以是由最多 4 个字符构成的任意字符串,包括可打印字符的任意 组合以及表示非打印字符的任意 8 位十六进制 ASCII 代码。例如,指定:


• '\x09',以将制表符表示为终结符。

• '\x00',表示空终结符(如同 "C" 字符串中一样,没有可见终结符)。

• '\x0a',表示作为终结符的换行符。还可以使用特殊字符组合 "\n" 作为换行符。

image

注意: 分隔符字符串长度可为 1 4 个字符,但在 DELIMITED BY 子句中只能指 定单个字符。对于 BCP,分隔符最多可达 10 个字符。

image

• ASCII 字符形式的 DATE DATETIME 字符串。必须使用 SAP Sybase IQ 支持的 日期数据类型和日期时间数据类型的对应格式之一定义字符串的 input-date-format input-datetime-format。使用 DATE 表示日期值,并使用 DATETIME 表示日期时间和 时间值。


6. 格式化日期和时间


选项

含义

yyyy YYYY yy YY

表示年份数字。缺省值为当前年份。

mm MM

表示月份数字。适当情况下始终在月份数字中使用前导零或空白,例如,"05" 表示 5 月。DATE 值必须包含月份。例如,如果您输入的 DATE 值为 1998,则会收到 错误提示。如果输入 "03",则 SAP Sybase IQ 将应用缺省年份和日期,并将其转 换为 '1998-03-01'

dd DD jjj JJJ

表示日期数字。缺省日期为 01。适当情况下始终在日期数字中使用前导零,例 如,'01' 表示第一天。J j 表示一年中的儒略日(1 366)。

hh

HH

表示小时。小时基于 24 小时制。适当情况下始终在小时中使用前导零或空白, 例如,'01' 表示凌晨 1 点。'00' 也是有效值,表示中午 12 点。

nn

表示分钟。适当情况下始终在分钟中使用前导零,例如,'08' 表示 8 分钟。

ss[.ssssss]

表示秒和秒的小数部分。

aa

表示 a.m. p.m. 标记。

pp

仅当需要时表示 p.m. 标记。(这与 12.0 之前的 SAP Sybase IQ 版本不兼容;先前 "pp" "aa" 是同义词。)

hh

SAP Sybase IQ 假设分钟和秒钟均为零。例如,如果您输入的 DATETIME 值为 '03', 则 SAP Sybase IQ 将该值转换为 '03:00:00.0000'

hh:nn hh:mm

SAP Sybase IQ 假设秒钟为零。例如,如果您输入的时间值为 '03:25',则 SAP Sybase IQ 将该值转换为 '03:25:00.0000'


7. 示例 DATE DATETIME 格式选项


输入数据

格式规范

12/31/98

DATE ('MM/DD/YY')


输入数据

格式规范

19981231

DATE ('YYYYMMDD')

123198140150

DATETIME ('MMDDYYhhnnss')

14:01:50 12-31-98

DATETIME ('hh:nn:ss MM-DD-YY')

18:27:53

DATETIME ('hh:nn:ss')

12/31/98 02:01:50AM

DATETIME ('MM/DD/YY hh:nn:ssaa')

SAP Sybase IQ 针对常用日期、时间和日期时间格式提供了内置装载优化。如果您要 装载的数据与其中一种格式匹配,则使用相应的格式可以显著缩短装载时间。

还可以将日期/时间字段指定为 ASCII 固定宽度字段(如上所述),并使用 FILLER(1)

选项跳过列分隔符。

装载到表列中时,column-spec NULL 部分指示如何将某些输入值视为 NULL 值。 这些字符可能包括 BLANKSZEROS 或您定义的任何其它文字列表。指定 NULL 值 或从源文件读取 NULL 值时,目标列必须能够包含 NULL

ZEROS 含义如下:如果(并且仅当)输入数据(转换前,如果为 ASCII)均为二进 制零(而不为字符零),则此单元设置为 NULL

如果输入数据为字符零,则:

1. NULL (ZEROS) 永远不会导致单元变为 NULL

2. NULL ('0') 导致单元变为 NULL

如果输入数据为二进制零(清除所有位),则:

1. NULL (ZEROS) 导致单元变为 NULL

2. NULL ('0') 永远不会导致单元变为 NULL

例如,如果 LOAD 语句包含 col1 date('yymmdd') null(zeros) 并且日期为 000000,则会收到错误消息,提示您 000000 无法转换为 DATE (4)。若要使 LOAD TABLE 在数据为 000000 时在 col1 中插入空值,请将 NULL 子句编写为 null('000000'),或将数据修改为相同数目的二进制零并使用 NULL(ZEROS)

如果 VARCHAR 单元的长度为零并且该单元不为空值,则将获得一个零长度单元。对 于所有其它数据类型来说,如果单元长度为零,SAP Sybase IQ 将插入 NULL。这是 ANSI 行为。对于零长度字符数据的非 ANSI 处理,请设置 NON_ANSI_NULL_VARCHAR 数据库选项。

使用 DEFAULT 选项指定装载缺省列值。即使列未在表模式中定义缺省值,您仍可以 向该列装载缺省值。在装载时,此功能可提供更大的灵活性。

LOAD TABLE DEFAULTS 选项必须为 ON 才能使用 LOAD TABLE 语句中指定的缺省 值。如果 DEFAULTS 选项为 OFF,则不会使用指定的装载缺省值,而会在列中插入 NULL 值。


LOAD TABLE 命令必须包含至少一个需要从 LOAD TABLE 命令所指定的文件中装 载的列。否则将报告错误,并且不会执行装载。

指定的装载缺省值必须符合受支持的列缺省值和缺省值限制。 LOAD TABLE DEFAULT

选项不支持 AUTOINCREMENTIDENTITY GLOBAL AUTOINCREMENT 作为装载

缺省值。

LOAD TABLE DEFAULT default-value 必须属于数据库的字符集。

对于在 LOAD TABLE DEFAULT 子句中指定的装载缺省值,不支持对缺省值进行加 密。

对于在表中插入的每行,将计算因评估指定装载缺省值而引起的约束冲突的总数。

load-specification 的另一重要部分是 FILLER 选项。此选项指示您希望跳过源输入文件 中的指定字段。例如,在输入文件中的行末尾或整个字段可能会存在不希望添加到表 中的字符。与 column-spec 定义一样,使用 FILLER 可以指定 ASCII 固定字节长度、 由分隔符分隔的可变长度字符,以及使用 PREFIX 字节的二进制字段。


标准

(返回顶部) (第 364 页)

• SQL - ISO/ANSI SQL 语法的服务商扩充。

• SAP Sybase 数据库产品 - 不适用。


权限

(返回顶部) (第 364 页)

执行 LOAD TABLE 语句所需的权限取决于数据库服务器的 -gl 命令行选项,如下所示:

-gl ALL – 您必须是表的所有者,对表具有 ALTER LOAD 权限,或者具有 ALTER ANY TABLELOAD ANY TALBE ALTER ANY OBJECT 系统特权。

-gl DBA – 您必须具有 ALTER ANY TABLELOAD ANY TABLE ALTER ANY OBJECT 系统特权。

-gl NONE – 不允许执行 LOAD TABLE 语句。

有关 -gl 命令行选项的详细信息,请参阅《实用程序指南》>start_iq 数据库服务器 启动实用程序”>start_iq 服务器选项”。

LOAD TABLE 还需要对表进行写锁定。


另请参见

• INSERT 语句 (第 349 页)

• LOAD_ZEROLENGTH_ASNULL 选项 (第 594 页)

• NON_ANSI_NULL_VARCHAR 选项 (第 616 页)


 



--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------