OceanBase v4.2 特性解析:新增三种临时表功能,更多的Oracle语句兼容

特性说明

在Oracle模式下,OceanBase临时表已经实现了基本的create、select、insert、delete、update等功能。为了满足更多客户的需求,OceanBase正在扩展临时表的功能,例如支持merge into和insert all操作。merge into允许用户将源表中的数据行以更新或插入的方式合并到目标表中,而insert all则允许用户一次性将数据插入到多个目标表中。

在OceanBase 4.2.2 版本中,OceanBase对merge into、insert all临时表 的功能进行了支持,同时还支持了insert、update、delete包含临时表的视图。下文详细介绍这三种使用场景。

使用场景

merge into临时表

临时表可作为merge into的目标表、源表,若merge into的目标表、源表是视图,视图中也可包含临时表。

下面对功能进行举例说明。

首先创建临时表temp1和非临时表t1。

复制代码
create global temporary table temp1(c1 int,c2 int) on commit preserve rows;
create table t1(c1 int, c2 int);

然后向temp1和t1中插入一些数据。

复制代码
insert into temp1 values(1,1),(2,2),(5,5);
insert into t1 values(1,2),(2,4),(3,6);

使用t1作为源表,temp1作为目标表,做merge into操作,将t1表中的数据和temp1表中的数据进行匹配,对匹配成功的temp1表数据进行更新,将匹配不成功的t1表数据插入temp1表中。

复制代码
merge into temp1 using t1 on (temp1.c1=t1.c1)
	when matched then update set temp1.c2=t1.c2
	when not matched then insert (c1,c2) values (t1.c1,t1.c2);

最后查看merge into临时表的结果,如下。

复制代码
select * from temp1;
+------+------+
| C1   | C2   |
+------+------+
|    1 |    2 |
|    2 |    4 |
|    5 |    5 |
|    3 |    6 |
+------+------+

insert all临时表

临时表可作为insert all的目标表、源表。

首先创建临时表temp1和非临时表t1, t2。

复制代码
create global temporary table temp1(c1 int,c2 int) on commit preserve rows;
create table t1(c1 int, c2 int);
create table t2(c1 int, c2 int);

然后向temp1, t1, t2中插入一些数据。

复制代码
insert into temp1 values(1,1),(2,2);
insert into t1 values(1,2),(2,4);
insert into t2 values(3,5);

使用t2作为源表,temp1和t1作为目标表,做insert all操作,将t2表中的数据插入temp1和t1表中。

复制代码
insert all
	into temp1 (c1, c2) values (v1, v2)
  into t1 (c1, c2) values (v1, v2)
	select c1 as v1, c2 as v2 from t2;

最后查看insert all临时表的结果,如下。

复制代码
select * from temp1;
+------+------+
| C1   | C2   |
+------+------+
|    1 |    1 |
|    2 |    2 |
|    3 |    5 |
+------+------+

select * from t1;
+------+------+
| C1   | C2   |
+------+------+
|    1 |    2 |
|    2 |    4 |
|    3 |    5 |
+------+------+

insert、update、delete包含临时表的视图

可以对包含临时表的视图进行insert、update、delete操作。

首先创建临时表temp1和包含临时表的视图v1。

复制代码
create global temporary table temp1(c1 int,c2 int) on commit preserve rows;
create view v1 as select * from temp1;

对视图进行insert操作。

复制代码
insert into v1 values (3,4);
insert into v1 values (4,5);

查看insert的结果,如下。

复制代码
select * from temp1;
+------+------+
| C1   | C2   |
+------+------+
|    3 |    4 |
|    4 |    5 |
+------+------+

select * from v1;
+------+------+
| C1   | C2   |
+------+------+
|    3 |    4 |
|    4 |    5 |
+------+------+

对视图进行update操作。

复制代码
update v1 set c1 = 5 where c2 = 4;

查看update的结果,如下。

复制代码
select * from temp1;
+------+------+
| C1   | C2   |
+------+------+
|    5 |    4 |
|    4 |    5 |
+------+------+

select * from v1;
+------+------+
| C1   | C2   |
+------+------+
|    5 |    4 |
|    4 |    5 |
+------+------+

对视图进行delete操作。

复制代码
delete from v1 where c1 = 4;

查看delete的结果,如下。

复制代码
select * from temp1;
+------+------+
| C1   | C2   |
+------+------+
|    5 |    4 |
+------+------+

select * from v1;
+------+------+
| C1   | C2   |
+------+------+
|    5 |    4 |
+------+------+
相关推荐
OceanBase数据库官方博客4 天前
解析 OceanBase 生态工具链 —— OAT / obd / OCP / obshell
数据库·oceanbase·分布式数据库
正在走向自律4 天前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险深度解析
数据库迁移·kingbasees·oracle兼容·国产化替代
福大大架构师每日一题8 天前
RAGFlow v0.24.0 发布!全新「内存系统 + 多沙箱引擎 + OceanBase 支持」惊艳登场,功能全面革新!
oceanbase·ragflow
云和恩墨15 天前
云和恩墨zCloud V6.0、zData X V3与OceanBase V4完成兼容互认证,解锁数据管理新可能
oceanbase·兼容认证·zcloud·zdatax
OceanBase数据库官方博客18 天前
从分库分表到原生分布式:高德基于 OceanBase 的数据底座演进之路
数据库·oceanbase·分布式数据库
MoMoSQL66618 天前
2026年1月国产数据库大事记:国开行2822万采购Gbase,浙商银行930万采购GoldenDB,墨天轮发布“2025年度数据库”……
数据库·阿里云·tidb·oceanbase·gaussdb
正在走向自律21 天前
关系数据库迁移方案 - 金仓KingbaseES替代Oracle,深度兼容性解析与平滑迁移实践指南
数据库迁移·kingbasees·oracle兼容·金仓数据库·国产化替代
OceanBase数据库官方博客24 天前
OceanBase场景解码系列三|OB Cloud 如何稳定支撑中企出海实现数 10 倍的高速增长?
数据库·oceanbase·分布式数据库
码海踏浪24 天前
从简单到专业在OceanBase中查看SQL是否走索引
数据库·sql·oceanbase
OceanBase数据库官方博客1 个月前
DeepK 自动程序修复框架论文——OceanBase 校企联合研究
数据库·oceanbase·分布式数据库