---
title: "SELECT INTO - OceanBase 数据库 V4.2.1 | OceanBase 文档中心"
description: "SELECT INTO 描述 该语句用于将查询结果存储在变量或文件中。其中： SELECT ... INTO OUTFILE 用于将结果集存储在外部文件，并可以指定输出格式。 说明 SELECT ... INTO OUTFILE 输出数据时支持使用 \\N 代表 NULL 。 SELECT ... INTO DUMPF…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.1 LTS

# SELECT INTO

更新时间：2026-07-15 20:56:55

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.1/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/8000.select-into-of-mysql-mode.md)  

## 描述

该语句用于将查询结果存储在变量或文件中。其中：

- `SELECT ... INTO OUTFILE` 用于将结果集存储在外部文件，并可以指定输出格式。

  #### 说明

  `SELECT ... INTO OUTFILE` 输出数据时支持使用 `\N` 代表 `NULL`。
 - `SELECT ... INTO DUMPFILE` 用于向外部文件写入不带格式的单行。
 - `SELECT ... INTO var_list` 用于将结果集存储到变量。

## 权限要求

执行 `SELECT INTO` 语句，需要拥有 `FILE` 权限和对应表的 `SELECT` 权限。有关 OceanBase 数据库权限的详细介绍，请参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220876)。

**示例如下：**

要为用户授予 `FILE` 权限，可以使用以下命令格式：

```sql
GRANT FILE ON *.* TO user_name;

```

其中，`user_name` 是需要执行 `SELECT INTO` 命令的用户。

## 语法

```sql
select_stmt INTO
    {OUTFILE 'file_name'
        [{CHARSET | CHARACTER SET} charset_name]
        [field_opt]
        [line_opt]
    | DUMPFILE 'file_name'
    | into_var_list};

field_opt:
    {COLUMNS | FIELDS} field_term_list

field_term_list:
  field_term [, field_term ...]

field_term:
    {[OPTIONALLY] ENCLOSED | TERMINATED | ESCAPED} BY string

line_opt:
    LINES line_term_list

line_term_list:
    line_term [line_term]

line_term:
    {STARTING | TERMINATED} BY string

```

## 参数解释

| 参数 | 描述 |
| --- | --- |
| select_stmt | 指定要执行的查询语句。`select_stmt` 必须返回一个结果集，查询语句的具体结构和选项信息，参见 [SELECT 语句](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000222205)。   #### 说明    `INTO` 子句内容的位置也可以在查询语句的 `FROM` 之前。例如，`SELECT * INTO OUTFILE '/home/admin/test_data/test_tbl1.csv' FROM test_tbl1 WHERE id > 5;`。 |
| file_name | 用于指定导出文件的路径和文件名。`file_name` 有以下格式：   - 将导出文件保存在 OBServer 节点：`/$PATH/$FILENAME`。 - 将导出文件保存在 OSS 上：`oss://$PATH/$FILENAME/?host=$HOST&access_id=$ACCESS_ID&access_key=$ACCESSKEY`。   参数解释如下：   - `$PATH`：指定要保存导出文件的路径。      - 导出到 OBServer 节点中就是指定导出文件在 OBServer 节点的路径。     - 导出到 OSS 上就是指定存储桶中的文件路径。 - `$FILENAME`：指定要导出文件的名称。 - `$HOST`：指定 OSS 服务的主机名或 CDN 加速的域名，即要访问的 OSS 服务的地址。 - `$ACCESS_ID`：指定访问 OSS 服务所需的 Access Key ID，用于身份验证。 - `$ACCESSKEY`：指定了访问 OSS 服务所需的 Access Key Secret，用于身份验证。    #### 说明    由于阿里云 OSS 有文件大小的限制，对于超过 5 GB 的文件，导出到 OSS 时会被拆分成多个文件，每个文件小于 5 GB。 |
| CHARSET \| CHARACTER SET charset_name | 可选项，指定导出到外部文件的字符集。`charset_name` 表示字符集的名称。 |
| field_opt | 可选项，导出字段格式选项。指定输出文件中各个字段的格式，通过 `FIELDS` 或 `COLUMNS` 子句来指定。详细介绍可参见下文 [field_term](#field_term)。 |
| line_opt | 可选项，导出数据行的开始和结束符选项。指定输出文件中每一行的开始和结束字符，通过 `LINES` 子句设置。详细介绍可参见下文 [line_term](#line_term)。 |

### field_term

- `[OPTIONALLY] ENCLOSED BY string`：用来指定包裹字段值的符号，默认没有引用符号。例如，`ENCLOSED BY '"'` 表示字符值放在双引号之间。如果使用了 `OPTIONALLY` 关键字，则仅对字符串类型的值使用指定字符包裹。
 - `TERMINATED BY string`：用来指定字段值之间的符号。例如，`TERMINATED BY ','` 指定了逗号作为两个字段值之间的标志。
 - `ESCAPED BY string`：用来指定转义字符，以便处理特殊字符或解析特殊格式的数据。默认的转义字符是反斜杠（`\`）。

### line_term

- `STARTING BY string`：指定每一行开始的字符，默认没有起始符号。
 - `TERMINATED BY string`：指定每一行的结束字符，默认使用换行符。例如，`... LINES TERMINATED BY '\n' ...` 表示一行将以换行符作为结束标志。

## 示例

### 导出数据文件到本地

1. 设置导出的文件路径。

   要导出文件，需要先设置系统变量 `secure_file_priv`，配置导出文件可以访问的路径。

   #### 注意

   由于安全原因，设置系统变量 `secure_file_priv` 时，只能通过本地 Socket 连接数据库执行修改该全局变量的 SQL 语句。更多信息，参见[secure_file_priv](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220800)。

      1. 登录到要连接 OceanBase 数据库的 OBServer 节点。

        ```bash
        ssh admin@xxx.xxx.xxx.xxx

        ```
      2. 执行以下命令，通过本地 Unix Socket 连接方式连接租户 `mysql001`。

        ```bash
        obclient -S /home/admin/oceanbase/run/sql.sock -uroot@mysql001 -p******

        ```
      3. 设置导出路径为 `/home/admin/test_data`。

        ```sql
        SET GLOBAL secure_file_priv = "/home/admin/test_data";

        ```
      4. 退出登录。
 2. 重新连接数据库后，使用 `SELECT INTO OUTFILE` 语句导出数据。指定逗号作为两个字段值之间的标志；对字符串类型的值使用 `"` 字符包裹；使用换行符作为结束标志。指定文件名为 `test_tbl1.csv`。

   ```sql
   SELECT /*+parallel(2)*/ *
     FROM test_tbl1
       INTO OUTFILE '/home/admin/test_data/test_tbl1.csv'
       FIELDS TERMINATED BY ','
       OPTIONALLY ENCLOSED BY '"'
       LINES TERMINATED BY '\n';

   ```

   返回结果如下：

   ```shell
   Query OK, 9 rows affected

   ```

### 导出数据文件到 OSS

使用 `SELECT INTO OUTFILE` 语句从 `test_tbl2` 表中按分区导出数据到指定的 OSS 存储位置。分区依据是 `col1` 和 `col2` 列的组合，相同的行属于同一个分区，将导出到同一个目录中。

```sql
SELECT /*+parallel(3)*/ * FROM test_tbl2
  INTO OUTFILE 'oss://$DATA_FOLDER_NAME/?host=$OSS_HOST&access_id=$OSS_ACCESS_ID&access_key=$OSS_ACCESS_KEY';

```

存储位置由 `$DATA_FOLDER_NAME` 变量指定，同时需要提供 OSS 的主机地址、访问 ID 和访问密钥。

## 相关文档

- [使用 OUTFILE 语句导出数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218020)
 - [SELECT](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000222205)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
