oracle多表插入命令INSERT ALL和INSERT FIRST

使用Insert Select实现同时向多个表插入记录

1:

NSERT ALL
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]

-------行列转换-------

CREATE TABLE test_1(CODE,NAME,INNER_CODE );
create table test_2(id varchar(6),type_n char(1),name_n varchar(200));
insert all
into test_2(id,type_n,name_n) values(CODE,1,NAME)
into test_2(id,type_n,name_n) values(CODE,2,INNER_CODE)
select * FROM test_1;

2:

NSERT FIRST
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]

注意事项:

1:

--insert all 不带条件

--insert all 带条件

--insert first  带条件

2:

a、你只能在表而不能在视图上执行多表插入;
b、你不能执行一个多表插入到一个远程表;
c、在执行一个多表插入时,你不能指定一个表集合表达式;

d、一个单个的多表插入语句可以包含最多 127 个 WHEN 子句
e、在一个多表插入中,所有的 insert_into_clauses 不能组合指定多于 999 个列;
f、只有当所有insert_into_clauses中的表数据都没有发生更新时,Rollback才会起作用。
g、多表插入语句中的子查询不能使用序列。

3:

insert first 如果第一个 WHEN 子句的值为 true,Oracle 服务器对于给定的行执行相应的 INTO 子句,并且跳过后面的 WHEN 子句(后面的when语句都不再考虑满足第一个When子句的记录,即使该记录满足when语句中的条件,而insert all 是继续执行,会插入重复的数据)。

其区别也可描述为,all只要满足条件,可能会作重复插入;first首先要满足条件,然后筛选,不做重复插入
同时,insert all可以实现行列转换功能(insert all的旋转功能)

猜你喜欢

转载自yuebishuhui-sina-com.iteye.com/blog/2192033