1、insert ...all
SQL> select * from test;
ID NAME SALES
---------- -------- ----------
1 a 123
2 b 23
3 c 234
4 d 674
5 e 100
SQL> select * from test1;
ID NAME SALES
---------- ---------- ----------
SQL> select * from test2;
ID NAME MANID
---------- ---------- ----------
SQL> insert all
2 into test1 values(id,name,sales)
3 into test2 values(id,name,manid)
4 select id,name,sales,id manid
5 from test;
10 rows inserted
--上面把test的表数据全部插入了test1和test2,重复了2次,10条记录
2、insert all when
SQL> insert all
2 when sales>200 then
3 into test2 values(id,name,manid)
4 else
5 into test1 values(id,name,sales)
6 select id,name,sales,id manid
7 from test;
5 rows inserted
--上面把sales》200的,也就是业绩比较好的插入到test2,其他的插入到test1;
3、insert first when
SQL> Insert First When Sales > 100 Then Into Test2
2 Values
3 (100, Name, Manid) When Sales > 100 Then Into Test2
4 Values
5 (100, Name, Manid) Else Into Test1
6 Values
7 (Id, Name, Sales)
8 Select Id, Name, Sales, Id Manid From Test;
5 rows inserted
SQL> Insert All When Sales > 100 Then Into Test2
2 Values
3 (100, Name, Manid) When Sales > 100 Then Into Test2
4 Values
5 (100, Name, Manid) Else Into Test1
6 Values
7 (Id, Name, Sales)
8 Select Id, Name, Sales, Id Manid From Test;
8 rows inserted
SQL>
--上面的例子和2有点类似,我们发现Insert All When 是逐个条件循环判断过去,满足了就执行insert,而Insert First When 则先针对first后面的第1个条件进行判断后,如果数据已经在first后的第一个条件满足并且被执行insert了,那么即使满足了后面的when条件,也不再insert操作;
4、insert all的另法,一个循环的插入办法;
SQL> Select t.* From Test t;
ID NAME SALES1 SALES2 SALES3
---------- -------- ---------- ---------- ----------
1 a 123 343 11
2 b 23 123 21
3 c 234 22 2
4 d 674 33 112
5 e 100 212 432
SQL> Select * From Test1;
ID NAME SALES
---------- ---------- ----------
SQL> Insert All Into Test1
2 Values
3 (Id, Name, Sales1) Into Test1
4 Values
5 (Id, Name, Sales2) Into Test1
6 Values
7 (Id, Name, Sales3)
8 Select Id, Name, Sales1, Sales2, Sales3 From Test;
15 rows inserted
SQL> Select * From Test1;
ID NAME SALES
---------- ---------- ----------
1 a 123
2 b 23
3 c 234
4 d 674
5 e 100
1 a 343
2 b 123
3 c 22
4 d 33
5 e 212
1 a 11
2 b 21
3 c 2
4 d 112
5 e 432
15 rows selected
最后看一下多表插入语句的限制条件:
只能对表执行多表插入语句,不能对视图或物化视图执行;
不能对远端表执行多表插入语句;
不能使用表集合表达式;
不能超过999个目标列;
在RAC环境中或目标表是索引组织表或目标表上建有BITMAP索引时,多表插入语句不能并行执行;
多表插入语句不支持执行计划稳定性;
多表插入语句中的子查询不能使用序列。