码迷,mamicode.com
首页 > 数据库 > 详细

Oracle插入之 insert all、insert first

时间:2015-04-18 19:16:58      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:oracle

利用insert first/all使得INSERT语句可以同时插入多张表,还可以根据判断条件来决定每条记录插入到哪张或哪几张表中。
insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。
insert all :对于每一行数据,对每一个when条件都进行检查,如果满足条件就执行插入操作。

create table edw_int   
(   
  agmt_no         varchar2(40 byte)             not null,   
  agmt_sub_no     varchar2(4 byte)              not null,   
  need_repay_int  number(22,2),   
  curr_period     number(4)                     not null   
); 
create table edw_int_1   
(   
  agmt_no         varchar2(40 byte)             not null,   
  agmt_sub_no     varchar2(4 byte)              not null,   
  need_repay_int  number(22,2),   
  curr_period     number(4)                     not null   
);   
create table edw_int_2   
(   
  agmt_no         varchar2(40 byte)             not null,   
  agmt_sub_no     varchar2(4 byte)              not null,   
  need_repay_int  number(22,2),   
  curr_period     number(4)                     not null   
);  
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values ('20003874', '2104', 3126.5, 7);
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values ('20003874', '2104', 3290.76, 6);
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values ('20003874', '2104', 3454.06, 5);
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values ('20003874', '2104', 3616.41, 4);
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values  ('20017143', '2104', 2350.86, 0);
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values ('20017143', '2104', 3566.55, 0);
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values ('20018273', '2104', 1639.46, 0);
insert into edw_int  (agmt_no, agmt_sub_no, need_repay_int, curr_period) values ('20018273', '2104', 2080.49, 0);
COMMIT;
insert all示例
insert all 
      into edw_int_1 (agmt_no, agmt_sub_no, need_repay_int, curr_period) values (agmt_no, agmt_sub_no, need_repay_int, curr_period) 
      into edw_int_2 (agmt_no, agmt_sub_no, curr_period) values (agmt_no, '1234', curr_period)
   select agmt_no, agmt_sub_no, need_repay_int, curr_period from edw_int;
commit;
技术分享技术分享
删除完数据继续测试 加上条件when then else
truncate table edw_int_1;
truncate table edw_int_2;

insert all 
      when curr_period = 0 then 
         into edw_int_1 (agmt_no, agmt_sub_no, need_repay_int, curr_period) values (agmt_no, agmt_sub_no, need_repay_int, curr_period) 
      else 
         into edw_int_2 (agmt_no, agmt_sub_no, need_repay_int, curr_period) values (agmt_no, agmt_sub_no, need_repay_int, curr_period)
   select agmt_no, agmt_sub_no, need_repay_int, curr_period from edw_int;
commit;
技术分享技术分享
删除数据测试insert first

insert first 
     when curr_period = 0 then 
        into edw_int_1 (agmt_no, agmt_sub_no, need_repay_int, curr_period) values (agmt_no, agmt_sub_no, need_repay_int, curr_period) 
     when agmt_sub_no = '2104' then 
        into edw_int_2 (agmt_no, agmt_sub_no, need_repay_int, curr_period) values (agmt_no, agmt_sub_no, need_repay_int, curr_period)
  select agmt_no, agmt_sub_no, need_repay_int, curr_period from edw_int;
commit;




Oracle插入之 insert all、insert first

标签:oracle

原文地址:http://blog.csdn.net/xiaokui_wingfly/article/details/45115299

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!