关于INSERT ALL和INSERT 
FIRST 
一、无条件 INSERT ALL 
二、条件 INSERT ALL 
三、条件 
INSERT 
FIRST 
Insert…Select 
使用Insert Select实现同时向多个表插入记录 
一、无条件 
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一次。 
二、条件 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 子句。 
三、条件 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 
子句(后面的when语句都不再考虑满足第一个When子句的记录,即使该记录满足when语句中的条件)。 
注:多表 
INSERT 
语句上的约束 
a、你只能在表而不能在视图上执行多表插入; 
b、你不能执行一个多表插入到一个远程表; 
c、在执行一个多表插入时,你不能指定一个表集合表达式; 
d、在一个多表插入中,所有的 
insert_into_clauses 
不能组合指定多于 999 个目列; 
e、只有当所有insert_into_clauses中的表数据都没有发生更新时,Rollback才会起作用。
Oracle多表插入语句Insert All/Insert First,布布扣,bubuko.com
Oracle多表插入语句Insert All/Insert First
原文地址:http://www.cnblogs.com/nuaa/p/3719847.html