Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (P-Z)

 

UNLOAD 语句

此语句用于将数据从数据源卸载到文件中。

语法
UNLOAD data-source
{ TO filename
   | INTO FILE filename
   | INTO CLIENT FILE client-filename 
   | INTO VARIABLE variable-name }
[ unload-option ... ]
data-source
[ FROM ] [ TABLE ] [ owner.]table-name 
| [ FROM ] [ MATERIALIZED VIEW ] [ owner.]materialized-view-name
| select-statement
filename : string | variable
client-filename : string | variable
语法
unload-option :
APPEND { ON | OFF }
| BYTE ORDER MARK { ON | OFF }
| { COMPRESSED | NOT COMPRESSED }
| { COMPRESSED | NOT COMPRESSED }
| COLUMN DELIMITED BY  string
| DELIMITED BY string
| ENCODING encoding
| { ENCRYPTED KEY 'key' [ ALGORITHM 'algorithm' ] | NOT ENCRYPTED }
| ESCAPE CHARACTER character
| ESCAPES { ON | OFF }
| FORMAT { TEXT | BCP }
| HEXADECIMAL { ON | OFF }
| ORDER { ON | OFF }
| QUOTE string
| QUOTES { ON | OFF }
| ROW DELIMITED BY string
encoding : string
参数
  • TO 子句   要将数据卸载到的文件的名称。filename 路径是相对于数据库服务器启动目录的路径。如果该文件不存在,则会进行创建。如果该文件已存在,则除非另外指定了 APPEND ON,否则该文件会被覆盖。

  • INTO FILE 子句   语义上等效于 TO filename

  • INTO CLIENT FILE 子句   客户端计算机上用于存放所卸载数据的文件。如果该文件不存在,则会进行创建。如果该文件已存在,则除非另外指定了 APPEND ON,否则该文件会被覆盖。将相对于客户端应用程序的当前工作目录来解析此路径。

    要使用 SQL Remote 将数据卸载到客户端计算机,请参见PASSTHROUGH 语句 [SQL Remote]

  • INTO VARIABLE 子句   要将数据卸载到的变量。该变量必须已存在,且必须为 CHAR、NCHAR 或 BINARY 类型。APPEND 选项可以使卸载的数据附加到变量的当前内容。

  • APPEND 子句   APPEND 为 ON 时,卸载的数据将附加到指定文件的末尾。APPEND 为 OFF 时,卸载的数据将替换指定文件的内容。缺省情况下,APPEND 为 OFF。如果指定了 COMPRESSED 或 ENCRYPTED 子句,则不能指定此子句,如果要附加的文件已进行压缩或加密,则也不能使用此子句。

  • BYTE ORDER MARK 子句   此子句用于指定字节顺序标记 (BOM) 是否出现在编码中。缺省情况下,此选项为 ON,只要卸载的目标文件为本地文件或客户端文件。BYTE ORDER MARK 选项为 ON 时,UTF-8 和 UTF-16 数据包含 BOM。如果 BYTE ORDER MARK 为 OFF,则不卸载 BOM。

  • COMPRESSED 子句   指定是否压缩数据。缺省值为 NOT COMPRESSED。如果想要附加到该数据 (APPEND ON),则不能对其进行压缩。

    如果要附加到的文件已进行压缩,则必须指定 COMPRESSED 子句。

  • DELIMITED BY 子句   用于列间的字符串。缺省列分隔符是逗号。通过提供字符串可指定其它列分隔符。只有字符串的第一个字节(字符)用作分隔符。

  • ENCODING 子句   所有的数据库数据都从数据库字符编码转换为指定的字符编码。未指定 ENCODING 时,将使用数据库的字符编码且不执行转换。

    有关如何获得 SQL Anywhere 支持的编码列表的信息,请参见支持的字符集

    如果在卸载操作期间发生转换错误,将根据 on_charset_conversion_failure 选项的设置进行报告。请参见on_charset_conversion_failure 选项 [数据库]

    以下示例使用 UTF-8 字符编码卸载数据:

    UNLOAD TABLE mytable TO 'mytable_data_in_utf8.dat' ENCODING 'UTF-8';

    指定 BYTE ORDER 子句,使数据中包含字节顺序标记。

  • ENCRYPTED 子句   指定是否对数据加密。如果指定 NOT ENCRYPTED(缺省值),则不对数据加密。如果指定带密钥但无算法的 ENCRYPTED KEY,则使用 AES128 和指定的密钥对数据加密。如果指定带密钥和算法的 ENCRYPTED KEY,则使用指定的密钥和算法对数据加密。算法可以是 CREATE DATABASE 语句所接受的任何算法。您不能指定简单加密。请参见CREATE DATABASE 语句

    如果想要附加到该数据 (APPEND ON),则不能对其进行加密。

    如果要附加到的文件已进行加密,则必须指定 ENCRYPTED 子句。

  • ESCAPES 子句   在 ESCAPES 设置为 ON(缺省值)的情况下,数据库服务器会识别反斜线字符后面的字符并将其解释为特殊字符。换行符可以作为组合 \n 包含在数据中,其它字符可以作为十六进制 ASCII 代码(如使用 \x09 代替制表符)包含在数据中。两个连续的反斜线字符 ( \\ ) 被解释为单个反斜线。任何除 n、x、X 或 \ 以外的字符及前面的反斜线都被解释为两个单独的字符。例如,\q 插入反斜线和字母 q。

  • FORMAT 子句   以 TEXT 格式或 BCP 输出格式输出数据。如果选择 TEXT,则假定输入行为文本字符,每个输入行占一行,值由列分隔符字符串分隔。选择 BCP 会允许导入 Adaptive Server Enterprise 生成的包含 BLOB 的 BCP 输出文件。

  • HEXADECIMAL 子句   缺省情况下,HEXADECIMAL 为 ON。二进制列值以 0xnnnnnn... 格式写入,其中 0x 是零后跟一个 x,每个 n 都是一个十六进制数。处理多字节字符集时,使用 HEXADECIMAL ON 很重要。

    HEXADECIMAL 子句只能与 FORMAT TEXT 子句配合使用。

  • ORDER 子句   如果 ORDER 设置为 ON(缺省值),则导出的数据按聚簇索引(如果有)排序。如果没有聚簇索引,则导出的数据按主键值排列。如果 ORDER 设置为 OFF,则数据导出顺序与不使用 ORDER BY 子句从表中选择数据时的顺序相同。ORDER 设置为 ON 时,导出速度较慢。不过,由于索引步骤的简单性,使用 LOAD TABLE 语句时重装速度较快。

    对于 UNLOAD select-statement,ORDER 子句会被忽略。但仍然可以在 SELECT 语句中指定 ORDER BY 子句来对数据进行排序。

  • QUOTE 子句   QUOTE 子句仅适用于 TEXT 数据;string 放置于字符串值的两边。缺省值为单引号(撇号)。

  • QUOTES 子句   QUOTES 设置为 ON(缺省值)时,所有导出的字符串都用单引号括起来。

  • ROW DELIMITED BY 子句   此子句可用于指定表示记录结束的字符串。缺省的分隔符字符串是换行符 (\n)。然而,它可以是最大长度为 255 个字节的任何字符串;例如,... ROW DELIMITED BY '###' ...。相同的格式要求同样适用于其它 SQL 字符串。如果您要指定以制表符分隔的值,可使用制表符 (9) 的十六进制转义序列,... ROW DELIMITED BY '\x09' ...。如果分隔符字符串包含 \n,它将与 \r\n 或 \n 匹配。

注释

UNLOAD 语句允许将来自 SELECT 语句的数据导出到以逗号分隔的文件中。除非 SELECT 语句包含 ORDER BY 子句,否则结果集不排序。

UNLOAD TABLE 语句允许从数据库表或实例化视图到文件的高效批量导出。UNLOAD TABLE 语句比 Interactive SQL 的 OUTPUT 语句效率更高,并且可从任何客户端应用程序调用。

数据库服务器或客户端应用程序(分别取决于指定的是 TO FILE 还是 INTO CLIENT FILE),必须具有写入到指定文件的操作系统权限。

对于 UNLOAD TABLE,当卸载具有二进制数据类型的表列时,UNLOAD TABLE 以 \xnnnn 格式写入十六进制字符串,其中 n 是一个十六进制数。对于 UNLOAD select-statement,当卸载具有二进制数据类型的结果集列时,UNLOAD 以 \0xnnnn 格式写入十六进制字符串,其中 n 是一个十六进制数。

当卸载并重装有代理表的数据库时,您必须创建一个外部登录来将本地用户映射到远程用户,即使该用户在本地和远程数据库中的口令相同也是如此。如果您没有外部登录,那么重装有可能因为您无法连接到远程服务器而失败。请参见使用外部登录

当卸载到变量 (INTO VARIABLE) 时,输出会按如下方式转换为一个字符集:

  1. 使用 ENCODING 子句中指定的字符集。

  2. 如果未指定 ENCODING 子句,若变量为 NCHAR 型,则使用数据库 NCHAR 字符集;否则使用数据库 CHAR 字符集。

此外,如果变量为 CHAR 型,所选编码必须与数据库 CHAR 编码匹配;如果变量为 NCHAR 型,所选编码必须与数据库 NCHAR 编码匹配;BINARY 变量可以使用任何编码

如果选择对卸载数据进行压缩和加密,则会首先进行压缩。

UNLOAD TABLE 会在整个表或实例化视图上放置一个独占锁。

权限

卸载到变量时,不需要任何权限(除访问数据源所需的常规权限外)。

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

  • 如果 -gl 选项设置为 ALL,则必须对 UNLOAD 语句中引用的表具有 SELECT 权限。

  • 如果 -gl 选项设置为 DBA,则您必须具有 DBA 权限。

  • 如果 -gl 选项设置为 NONE,则不允许执行 UNLOAD。

请参见-gl 服务器选项

当写入到客户端计算机的文件中时:

副作用

无。查询在当前隔离级别上执行。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

以下示例将 Products 表中的内容卸载到 UTF-8 编码文件 productsT.dat 中:

UNLOAD TABLE Products TO 'productsT.dat' ENCODING 'UTF-8';

以下示例创建一个名为 @myProducts 的变量,然后将 Products.Name 列卸载到该变量:

CREATE VARIABLE @myProducts LONG VARCHAR;
UNLOAD SELECT NAME FROM Products INTO VARIABLE @myProducts;