此语句用于将当前的查询结果输出到文件。
OUTPUT TO filename [ APPEND ] [ BYTE ORDER MARK { ON | OFF } [ COLUMN WIDTHS ( integer, ... ) ] [ DELIMITED BY string ] [ ENCODING encoding ] [ ESCAPE CHARACTER character ] [ ESCAPES { ON | OFF } [ FORMAT output-format ] [ HEXADECIMAL { ON | OFF | ASIS } ] [ QUOTE string [ ALL ] ] [ VERBOSE ]
output-format : TEXT | FIXED | HTML | SQL | XML
encoding : string or identifier
OUTPUT USING connection-string INTO destination-table-name [ CREATE TABLE { ON | OFF } ]
connection-string : { DSN = odbc_data_source | DRIVER = odbc_driver_name [; connection_parameter = value [; ... ] ] }
APPEND 子句 此可选关键字用于将查询结果追加到现有输出文件的末尾,但不覆盖文件以前的内容。如果不使用 APPEND 子句,缺省情况下 OUTPUT 语句将覆盖输出文件的内容。当输出格式为 TEXT、FIXED 或 SQL 时,APPEND 关键字有效。
BYTE ORDER MARK 子句 此子句用于指定是否在 Unicode 文件的开始位置包含字节顺序标记 (BOM)。缺省情况下,此选项为 ON,即指示 Interactive SQL 在文件的开始位置写入字节顺序标记 (BOM)。如果 BYTE ORDER MARK 为 OFF,DBISQL 不写入 BOM。
只有写入 TEXT 格式的文件时 BYTE ORDER MARK 子句才有意义。如果试图将 BYTE ORDER MARK 子句与 FORMAT(而不是 TEXT)子句一起使用,会返回错误。
仅当读取或写入以 UTF-8 或 UTF-16(及它们的变体)编码的文件时才使用 BYTE ORDER MARK 子句。如果试图将 BYTE ORDER MARK 子句与任何其它编码一起使用,会返回错误。
DELIMITED BY 子句 DELIMITED BY 子句仅用于 TEXT 输出格式。分隔符字符串位于各列之间。缺省符号为逗号。
ENCODING 子句 ENCODING 子句允许指定用于写入文件的编码。ENCODING 子句只能与 TEXT 格式配合使用。
有关如何获得 SQL Anywhere 支持的编码列表的详细信息,请参见支持的字符集。
使用 Interactive SQL 时,如果未指定 ENCODING 子句,则按以下顺序确定用于写入文件的编码:
用 default_isql_encoding 选项指定的编码(如果设置此选项)
运行 Interactive SQL 的计算机上操作系统字符集的缺省编码
遇到不能用操作系统字符集表示的数据时,ENCODING 子句很有用。在这种情况下,如果不使用 ENCODING 子句,那些不能用缺省编码表示的字符在输出时会丢失(即发生有损耗的转换)。
如果在 OUTPUT 语句中指定了编码,则应指定与使用 INPUT 语句插入数据时相同的 ENCODING 子句。
有关 Interactive SQL 和编码的详细信息,请参见default_isql_encoding 选项 [Interactive SQL]。
ESCAPE CHARACTER 子句 以十六进制代码和符号存储的字符的缺省转义字符是反斜线 (\)。例如,\x0A 是换行符。
使用 ESCAPE CHARACTER 子句可以对此进行更改。例如,要将感叹号用作转义字符,可按如下方式指定:
... ESCAPE CHARACTER '!' |
可将换行字符指定为 '\n'。其它字符可以使用十六进制 ASCII 代码(如使用 \x09 表示制表符)指定。两个连续的反斜线字符 ( \\ ) 被解释为单个反斜线。任何除 n、x、X 或 \ 以外的字符及前面的反斜线都被解释为两个单独的字符。例如,\q 被解释为反斜线和字母 q。
ESCAPES 子句 在 ESCAPES 设置为 ON(缺省值)的情况下,数据库服务器会识别反斜线字符后面的字符并将其解释为特殊字符。当 ESCAPES 设置为 OFF 时,会完全按照字符在源代码中出现的方式写入字符。
FORMAT 子句 FORMAT 子句允许指定输出的文件格式。允许的输出格式有:
TEXT 输出 TEXT 格式的文件,且文件中每行代表一数据行。所有的值都用逗号分隔,并且字符串括在撇号(单引号)中。可以使用 DELIMITED BY 和 QUOTE 子句更改分隔符和引号字符串。如果在 QUOTE 子句中指定 ALL,则所有的值(不仅是字符串)都将用引号引起来。TEXT 是缺省的输出类型
还可以使用其它三种特殊序列。两个字符 \n 代表换行符;\\ 代表单个 \;而序列 \xDD 代表具有十六进制代码 DD 的字符。
FIXED 输出每列都有固定宽度的固定格式。使用 COLUMN WIDTHS 子句可以指定每一列的宽度。在该格式中不输出列标题。
如果省略 COLUMN WIDTHS 子句,则根据列的数据类型计算每列的宽度,该宽度足以容纳此数据类型的任何值。例外的是 LONG VARCHAR 和 LONG BINARY 数据缺省为 32 KB。
HTML 输出结果是超文本标记语言格式。
SQL 输出结果是 .sql 文件中的 Interactive SQL INPUT 语句(重新创建表中信息时需要使用此语句)。
XML 输出结果是以 UTF-8 编码且包含嵌入式 DTD 的 XML 文件。二进制值以 CDATA 块进行编码,二进制数据显示为两位数十六进制字符串。
INPUT 语句不接受 XML 作为文件格式。
HEXADECIMAL 子句 HEXADECIMAL 子句指定如何以 TEXT 格式输出二进制值。允许的值有:
ON 当设置为 ON 时,二进制值的写入形式为 Ox 前缀后跟一系列十六进制值对;例如,0xabcd。
OFF 当设置为 OFF 时,每次只写入一个字节的二进制值。每个字节前都有转义字符(如反斜线)作为前缀,后跟 x,然后是该字节的十六进制值对,例如 \xab\xcd。
ASIS 设置为 ASIS 时,值按原样写入而不发生任何转义,即使值中包含控制字符。ASIS 对于含有格式化字符(如制表符或回车符)的文本很有用。
QUOTE 子句 QUOTE 子句仅用于 TEXT 输出格式。引号字符串位于字符串值的两边。缺省值为单引号 (')。如果在 QUOTE 子句中指定 ALL,则引号字符串将被置于所有值的两边,而不仅仅是字符串的两边。
USING 子句 USING 子句将数据导出到 ODBC 数据源。可以使用 DSN 选项指定 ODBC 数据源名,或用 DRIVER 选项指定 ODBC 驱动程序名和连接参数。Connection-parameter 是数据库特定的连接参数的可选列表。
Odbc-data-source 是用户名称或 ODBC 数据源名称。例如,SQL Anywhere demo 数据库的 odbc-data-source 为 SQL Anywhere 11 Demo。
Odbc-driver-name 是 ODBC 驱动程序名。对于 SQL Anywhere 11 数据库,odbc-driver-name 是 SQL Anywhere 11;而对于 UltraLite 数据库,odbc-driver-name 为 UltraLite 11。
VERBOSE 子句 当包括可选的 VERBOSE 关键字时,会将有关查询的错误消息、用于选择数据的 SQL 语句和数据本身写入输出文件。不包含数据的行带有两个连字符作为前缀。如果省略 VERBOSE(缺省设置),则只将数据写入文件。当输出格式为 TEXT、FIXED 或 SQL 时,VERBOSE 关键字有效。
OUTPUT 语句将数据输出到文件或数据库。可在检索待输出数据的语句后面直接使用 OUTPUT 语句。如果前一个语句生成了多个结果集,则会返回错误。
可以使用可选的 FORMAT 子句指定输出格式。如果未指定 FORMAT 子句,则使用 Interactive SQL output_format 选项设置(请参见output_format 选项 [Interactive SQL])。
由于 INPUT 语句是 Interactive SQL 命令,它不能用在任何复合语句(例如 IF)或存储过程中。请参见过程、触发器、事件和批处理中允许使用的语句。
无。
在 Interactive SQL 中,[结果] 选项卡显示当前查询的结果。
SQL/2003 服务商扩充。
将 Employees 表的内容放在文本文件中:
SELECT * FROM Employees; OUTPUT TO 'Employees.txt' FORMAT TEXT; |
将 Employees 的内容放在现有文本文件的末尾,并在此文件中包括有关查询的任何消息:
SELECT * FROM Employees; OUTPUT TO 'Employees.txt' APPEND VERBOSE; |
假定需要导出包含嵌入式换行符的值。换行符的数值为 10,在 SQL 语句中可以用字符串 '\x0a' 代替该值。例如,执行以下语句,并将 HEXADECIMAL 设置为 ON:
SELECT CAST ('line1\x0aline2' AS VARBINARY); OUTPUT TO 'file.txt' HEXADECIMAL ON; |
将得到一个仅有一行的文件,其中包含以下文本:
0x6c696e65310a6c696e6532 |
但是,如果在 HEXADEMICAL 设置为 OFF 的情况下执行同一语句,则会获得以下文本:
'line1\x0Aline2' |
最后,如果将 HEXADECIMAL 设置为 ASIS,则会获得含有两行的文件:
'line1 line2' |
使用 ASIS 时获得两行是因为,已导出的嵌入式换行符没有转换成两位数的十六进制形式,也没有使用任何前缀。
以下示例将数据从 Customers 表输出到新表 Customers2 中:
SELECT * FROM Customers; OUTPUT USING 'dsn=SQL Anywhere 11 Demo' INTO "Customers2"; |
以下示例使用 DRIVER 选项将 demo 数据库中的 Customers 表复制到名为 mydatabase.db 的虚构数据库中。
SELECT * FROM Customers; OUTPUT USING "DRIVER=SQL Anywhere 11;uid=dba;pwd=sql;dbf=c:\test\mydatabase.db" INTO "Customers"; |
以下示例使用 DRIVER 选项将 SQL Anywhere demo 数据库中的 Customers 表复制到虚构 UltraLite 数据库 myULDatabase.db 中名为 Customers 的表中。
SELECT * FROM Customers; OUTPUT USING "DRIVER=Ultralite 11;dbf=c:\test\myULDatabase.udb" INTO "Customers"; |
以下示例使用 DRIVER 选项将 Customers 表复制到名为 mydatabase 的虚构 MySQL 数据库中。
SELECT * FROM Customers; OUTPUT USING "DRIVER=MySQL ODBC 5.1 Driver;DATABASE=mydatabase;SERVER=mySQLHost;UID=me;PWD=secret" INTO "Customers"; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |