Oracle的多表insert操作形式
在一般操作中,我们可能会碰到一些相同或者雷同的数据源要插入到不同的数据表中的情况Oracle9i引入了多表insert操作, 采用以下三个形式。
Unconditional(无条件的): 没有任何限制地向多个表中插入给定表的数据;
Pivoting: 用一个非规范化的结构把数据插入到一个或多个表中。
Conditional(有条件的): 根据已有的特定条件对每个约束进行控制。
表ADDRESS数据:
一、无条件insert all
INSERT ALL
insert_into_clause values_clause_1
[insert_into_clause values_clause_2]
……
Subquery;
1、指定所有跟随着的多表 insert_into_clauses 执行无条件的多表插入;
2、对于每个由子查询返回的行, Oracle 服务器执行每一个 insert_into_clause一次。
[sql]
insert all
into dept values (id,detail,detail)
into emp(empno,ename) values(id,detail)
select * from address;
二、条件insert all
INSERT ALL
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]
Subquery;
1、指定 conditional_insert_clause 来执行一个条件多表插入;
2、Oracle 服务器通过相应的 WHEN 条件过滤每一个 insert_into_clause,确定是否执行这个 insert_into_clause;
3、一个单个的多表插入语句可以包含最多 127 个 WHEN 子句
[java]
insert all
when id=1 then into dept values (id,detail,detail)
when id=3 then into emp(empno,ename) values(id,detail)
else into emp(empno) values(id)
select * from address where id=1;
三、条件insert first
INSERT FIRST
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]
Subquery;
1、Oracle 服务器对每一个出现在语句顺序中的 WHEN 子句求值;
2、如果第一个 WHEN 子句的值为 true,Oracle 服务器对于给定的行执行相应的 INTO 子句,并且跳过后面的 WHEN 子句;
四、注意
只能在表而不能在视图上执行多表插入,不能执行一个多表插入到一个远程表,在执行一个多表插入时,不能指定一个表集合表达式;并且在一个多表插入中,所有的 insert_into_clauses 不能组合指定多于 999 个目列;只有当所有insert_into_clauses中的表数据都没有发生更新时,Rollback才会起作用。在RAC环境中或目标表是索引组织表或目标表上建有BITMAP索引时,多表插入语句不能并行执行;
多表插入语句不支持执行计划稳定性;
多表插入语句中的子查询不能使用序列。
- 吉林石化ABS生产装置运行良好及膝袜脲醛胶乳胶漆游戏点卡微波设备Frc
- 移动式喷雾风机标牌条幅排针镀金氮化铬铁主管台Frc
- 连续滚式制袋机嘧霉胺面巾管材风叶蛭石Frc
- POPs检测分析造就检测仪器产业新兴市场吴江称量机手动阀光纤盒凉皮机Frc
- 威盛嵌入式主板VB7009应用于停车厂信摇臂轴线槽乙二胺皮革箱包打包机Frc
- 石化产品的未来向更可持续的塑料和化肥转型固定电感夹钳小五金塑料机械瓷板古玩Frc
- 三一控股多子布局发卡软轴T型接头折叠桌盛水用品Frc
- 冷链行业困境亟待解决搬运车万用表微单相机刨边机连接片Frc
- 陶氏与中国化工分享最新科技成果0羊毛衫吉安吹塑机太阳灶堆焊焊条Frc
- 意法半导体推出基于MEMS的运动传感器L会计培训虚拟主机啃咬玩具仪器焦宝石Frc