insert first&insert all的区别



insert first/all

 

利用insert first/all使得INSERT语句可以同时插入多张表,还可以根据判断条件来决定每条记录插入到哪张或哪几张表中。

insert first/all语法 
[ ALL | FIRST ] 
WHEN condition THEN insert_into_clause [values_clause] 
[insert_into_clause [values_clause]]... 
[WHEN condition THEN insert_into_clause [values_clause] 
[insert_into_clause [values_clause]]... 
]... 
[ELSE insert_into_clause [values_clause] 
[insert_into_clause [values_clause]]... 


insert first/all 是对每一行来进行判断
两者区别:
insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。
insert all :对于每一行数据,对每一个when条件都进行检查,如果满足条件就执行插入操作。

 

create table test_a(a number,b number);
create table b as select * from test_a;
create table c as select * from test_a;


insert into test_a values(1,0);
insert into test_a values(1,1);
insert into test_a values(1,2);
insert into test_a values(2,0);
insert into test_a values(3,0);

SQL> select * from test_a;

         A          B
---------- ----------
         1          0
         1          1
         1          2
         2          0
         3          0
         
现分别对insert first和insert all语句进行简单测试:(占不考虑SQL是否具有真实作用)      

 

SQL> insert all
  2  when a=1 then  into b
  3  when a=1 then  into c
  4  select * from test_a; 

6 rows created.

Elapsed: 00:00:00.01
SQL> select * from b;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.00
SQL> select * from c;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.01
SQL> rollback;

Rollback complete.

Elapsed: 00:00:00.01
SQL> select * from b;

no rows selected

Elapsed: 00:00:00.00
SQL> select * from c;

no rows selected

Elapsed: 00:00:00.00
SQL> insert first
  2  when a=1 then  into b
  3  when a=1 then  into c
  4  select * from test_a;    

3 rows created.

Elapsed: 00:00:00.00
SQL> 
SQL> select * from b;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.00
SQL> select * from c;

no rows selected

Elapsed: 00:00:00.00

 

部分转载自:http://lanying1982.blog.163.com/blog/static/23067748200810122341539/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值