Extensions to DDL and DML:Insert into

本文介绍了SQL中多种多表插入的方法,包括insert...all的基本用法、带when条件的insert...all、InsertFirstWhen的不同之处及一个循环插入的示例。通过这些技巧,可以更高效地管理数据。

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索引时,多表插入语句不能并行执行;

多表插入语句不支持执行计划稳定性;

多表插入语句中的子查询不能使用序列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值