---
title: OceanBase 使用 UNION ALL 的注意事项-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于OceanBase 使用 UNION ALL 的注意事项相关的常见问题和使用技巧，帮助您快速解决OceanBase 使用 UNION ALL 的注意事项的难题。
---
切换语言

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

划线反馈

# OceanBase 使用 UNION ALL 的注意事项

更新时间：2026-05-21 09:16

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：TechNote  

本文讲述 OceanBase 数据库 MySQL 和 Oracle 模式下使用 UNION ALL 拼接 SQL 的注意事项。

## 适用版本

OceanBase 数据库 V2.x 和 V3.x 版本。

## 操作步骤

OceanBase 数据库 MySQL 模式下，UNION ALL 拼接 SQL 的前后字段类型要求必须一致，否则数据库本身为了兼容所有类型，会默认选择 VARCHAR，这样会让优化器对含有 UNION ALL 的 SQL 语句优化效果大打折扣。

以下为示例：两个视图 `test_view1`、`test_view2`，强烈建议不使用视图 `test_view2`。

```shell
obclient [(none)]> use db_mysql
Database changed
obclient [db_mysql]> create table test1(id int ,utime timestamp,primary key (id));
Query OK, 0 rows affected (0.716 sec)

obclient [db_mysql]> create table test2(id int ,utime timestamp,primary key (id));
Query OK, 0 rows affected (0.492 sec)

obclient [db_mysql]> create view test_view1 as select id,utime from test1 union all select id,utime from test2;
Query OK, 0 rows affected (0.114 sec)

obclient [db_mysql]> create view test_view2 as select id,utime from test1 union all select utime,id from test2;
Query OK, 0 rows affected (0.184 sec)

obclient [db_mysql]> desc test_view1;
+-------+-----------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-------+
| id    | int(11)   | NO   |     | NULL    |       |
| utime | timestamp | YES  |     | NULL    |       |
+-------+-----------+------+-----+---------+-------+
2 rows in set (0.184 sec)

obclient [db_mysql]> desc test_view2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | varchar(19) | NO   |     | NULL    |       |
| utime | varchar(19) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.072 sec)

```

如果是 Oracle 模式，则直接报错，不允许创建 UNION ALL 前后 SQL 数据类型不一致的视图。示例如下：直接报错 ORA-01790。

```shell
obclient [sys]> create view test_view2 as select id,utime from test1 union all select utime,id  from test2;
ORA-01790: expression must have same datatype as corresponding expression

```

上一篇

[内部 SQL 返回 4018 触发 DDL 提前返回结果给客户端，实际未执行完成的问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000924789)

下一篇

[OceanBase 数据库 V4.x 版本 DDL 开启并行执行](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000366649) ![有帮助](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) 咨询热线
