Oracle23ai新特性单个INSERT INTO语句后跟多个VALUES子句

1、新特性简介

本次测试数据库版本Oracle 23ai Free Release 23.0.0.0.0

sql 复制代码
SYS@FREE> select * from v$version;

BANNER
--------------------------------------------------------------------------------
BANNER_FULL
--------------------------------------------------------------------------------
BANNER_LEGACY
--------------------------------------------------------------------------------
    CON_ID
----------
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
         0

BANNER
--------------------------------------------------------------------------------
BANNER_FULL
--------------------------------------------------------------------------------
BANNER_LEGACY
--------------------------------------------------------------------------------
    CON_ID
----------

Oracle23ai新特性,直接插入多行数据并不总是使用 INSERT ALL 语法。Oracle 提供了一种更简洁的方法来一次性插入多行数据,即使用单个 INSERT INTO 语句后跟多个 VALUES 子句。还可以使用values语句构建临时表。values语句构建数据和merge语句组合使用 。

2、 插入多行数据

在INSERT语句中,也可以实现多行的直接插入。

sql 复制代码
SYS@FREE> conn testuser/oracle@FREEPDB1
Connected.

TESTUSER@FREEPDB1> create table t_multirows (id number,infoname varchar2(32));
Table created.

TESTUSER@FREEPDB1> insert into t_multirows values(1,'oracle23c'),(2,'oracle23ai'),(3,'mysql8.4');

3 rows created.

TESTUSER@FREEPDB1> commit;
Commit complete.

TESTUSER@FREEPDB1> col infoname format a30
TESTUSER@FREEPDB1> select * from t_multirows;

        ID INFONAME
---------- ------------------------------
         1 oracle23c
         2 oracle23ai
         3 mysql8.4

3、使用values语句构建临时表

sql 复制代码
TESTUSER@FREEPDB1> select * from (values(1,'multiple'),(2,'values')) T (id,nameinfo);

        ID NAMEINFO
---------- ------------------------
         1 multiple
         2 values

4、values语句构建数据和cte 组合使用

cte (common table expressions)公用表表达式。

sql 复制代码
TESTUSER@FREEPDB1> with cte_values (id,nameinfo) as (values(1,'common'),(2,'table'),(3,'expressions')) select * from cte_values;

        ID NAMEINFO
---------- --------------------
         1 common
         2 table
         3 expressions
         
-- Oracle19c新增的自增id特性 generated by default as identity
CREATE TABLE t_identity
(
id NUMBER generated by DEFAULT AS identity ,
nameinfo varchar2(32),
sysguid varchar2(36),
CONSTRAINT pk_t_identity_id PRIMARY KEY(id)
);
-- sqlplus testuser/oracle@FREEPDB1
INSERT INTO t_identity(nameinfo,sysguid) values('generated by',sys_guid()),('DEFAULT',sys_guid()),('AS identity',sys_guid());
COMMIT;
-- 查询数据表
TESTUSER@FREEPDB1> SELECT * FROM  t_identity;

        ID NAMEINFO                       SYSGUID
---------- ------------------------------ ------------------------------------
         1 generated by                   18EFA5E23DDC0BA1E063E650A8C05A76
         2 DEFAULT                        18EFA5E23DDD0BA1E063E650A8C05A76
         3 AS identity                    18EFA5E23DDE0BA1E063E650A8C05A76
-- 再次插入两行数据
INSERT INTO t_identity(nameinfo,sysguid) values('get sys_guid',sys_guid()),('䶮中国字',sys_guid());
COMMIT;

TESTUSER@FREEPDB1> SELECT * FROM  t_identity;

        ID NAMEINFO                       SYSGUID
---------- ------------------------------ ------------------------------------
         1 generated by                   18EFA5E23DDC0BA1E063E650A8C05A76
         2 DEFAULT                        18EFA5E23DDD0BA1E063E650A8C05A76
         3 AS identity                    18EFA5E23DDE0BA1E063E650A8C05A76
         4 get sys_guid                   18EFA5E23DDF0BA1E063E650A8C05A76
         5 䶮中国字                       18EFA5E23DE00BA1E063E650A8C05A76

5、values语句构建数据和merge语句组合使用

sql 复制代码
MERGE into t_identity t1 
using  (values(4,'values meger',sys_guid()),(7,'table',sys_guid()),(8,'expressions',sys_guid())) t2 (ID,nameinfo,sysguid) 
on (t2.id=t1.id)
when matched then UPDATE set t1.nameinfo=t2.nameinfo,t1.sysguid=t2.sysguid
when not matched then insert (t1.id,t1.nameinfo,t1.sysguid) values(t2.id,t2.nameinfo,t2.sysguid);

TESTUSER@FREEPDB1> SELECT * FROM  t_identity;

        ID NAMEINFO                       SYSGUID
---------- ------------------------------ ------------------------------------
         1 generated by                   18EFA5E23DDC0BA1E063E650A8C05A76
         2 DEFAULT                        18EFA5E23DDD0BA1E063E650A8C05A76
         3 AS identity                    18EFA5E23DDE0BA1E063E650A8C05A76
         4 values meger                   18EFA5E23DE10BA1E063E650A8C05A76
         5 䶮中国字                       18EFA5E23DE00BA1E063E650A8C05A76
         7 table                          18EFA5E23DE20BA1E063E650A8C05A76
         8 expressions                    18EFA5E23DE30BA1E063E650A8C05A76

7 rows selected.
-- 可以看到ID=4的NAMEINFO='values meger',MERGE into字句执行之前是'get sys_guid'
-- 即ID关联匹配到的数据执行了更新操作,ID没有关联匹配到的数据执行了插入操作
相关推荐
细嗅蔷薇@12 小时前
排序和分⻚(order by 、limit)
数据库·oracle
梦想平凡12 小时前
棋牌游戏技术实战(五):从对局事件重新执行规则,核对棋盘和最终状态
数据库·游戏·oracle
白露与泡影13 小时前
Oracle AI Database 26ai RAC 部署步骤、关键命令与一键脚本
数据库·人工智能·oracle
腾科IT教育16 小时前
Oracle OCP和MySQL OCP怎么选?方向对比指南
mysql·oracle·ocp·oracle ocp·ocp怎么选·mysql ocp
行业研究员1 天前
Agent Memory降低Token消耗原理解析
数据库·人工智能·oracle·腾讯云·智能体
薛晓刚2 天前
Oracle ADG 备库归档丢了怎么办?RMAN 增量前滚实战
数据库·oracle
阿俊-全栈开发2 天前
LikeShop 版本升级与备份:从旧版平滑迁移的完整步骤
jvm·数据库·oracle·开源·likeshop·likeshop开源商城
蜗牛互联网2 天前
Java Agent 工具调用的 allowlist、参数校验与调用预算
java·开发语言·人工智能·后端·oracle
冰暮流星2 天前
sql之is not null运算符
数据库·sql·oracle
oradh2 天前
Oracle 索引深度解析(从内部原理到实战案例)
数据库·oracle