Extensions to DDL and DML:Insert into

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

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

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值