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 语句 (E-O)

 

OUTPUT 语句 [Interactive SQL]

此语句用于将当前的查询结果输出到文件。

语法 1 - 输出到文件
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
语法 2 - 输出到 ODBC 数据源
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 子句与任何其它编码一起使用,会返回错误。

  • COLUMN WIDTHS 子句   COLUMN WIDTHS 子句用于为 FIXED 格式的输出指定列宽。

  • CREATE TABLE 子句   CREATE TABLE 子句用于指定在目标表不存在时是否创建表。缺省值为 ON。

  • 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";