当前位置:   article > 正文

Oracle 批量插入sql

批量插入sql

oracle9i版本以后

1 无条件的 INSERT ALL

  1. insert all  
  2.     into test1 (empno,ename) values(empno,ename)  
  3.     into test1(ename,sal) values(ename,sal)  
  4.     select 1 from dual; 

 注意后边跟的SELECT语句可以随意,不过不是把它SELECT出来的内容插入前边的表里,而是起到前边的多个数据每次插入多少行的作用,这个多少行是由后边跟的SELECT语句查出来几条而定的,如后边的跟的SELECT 语句查出了15条记录,则前边的

"INSERT ALL INTO  a表 VALUES(各个值1) 

INTO a表 VALUES (其它值2)

INTO a表 VALUES(其它值3)"

就会先插入值1对应的各个字段插入15条记录,然后插入值2各个对应的字段15条记录,然后插入值3对应的各个字段15条记录。插入的值中不能有主键,且应该有自增主键。

批量插入多个VALUES这样的一条记录,所以后边的SELECT 语句只要能查出一条记录就行,建议用SELECT 1 FROM DUAL。

下面的方法同上面的语句:

INSERT INTO CM_NOTICE_CONTROL_SETTINGS  (OPERATE_USERID, NOTICE_SENDING_FLAG ,CREATORID)

      SELECT '11','YYYYYY','11' FROM DUAL

      UNION ALL SELECT '22','YYYYY','22' FROM DUAL

      UNION ALL SELECT '33','YYYYY','33' FROM DUAL

2 有条件的INSERT ALL语句

(对于每一行数据,对每一个when条件都进行检查,如果满足条件就执行插入操作)

  1. -- 有条件的INSERT ALL语句  
  2. insert all  
  3.     when sal>1000 then  
  4.     into test1 (empno,sal,mgr) values (empno,sal,mgr)   
  5.     when comm<500 then  
  6.     into test1 (empno,comm,mgr) values(empno,comm,mgr)  
  7.     select empno,sal,mgr,comm   
  8.     from emp;  

3 有条件的 FIRST INSERT语句

(对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件)

  1. -- 有条件的 FIRST INSERT语句  
  2. -- 对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。  
  3. insert first  
  4.     when sal>1000 then  
  5.     into test1 (empno,sal,mgr) values (empno,sal,mgr)   
  6.     when comm<500 then  
  7.     into test1 (empno,comm,mgr) values(empno,comm,mgr)  
  8.     select empno,sal,mgr,comm   
  9.     from emp;  

INSERT ALL 和INSERT FIRST对比

  1. SQL> -- 有条件的INSERT ALL语句  
  2.  insert all  
  3.       when sal>1000 then  
  4.      into test1 (empno,sal,mgr) values (empno,sal,mgr)  
  5.      when comm<500 then  
  6.      into test1 (empno,comm,mgr) values(empno,comm,mgr)  
  7.      select empno,sal,mgr,comm  
  8.      from emp;  
  9.   
  10. 已创建14行。  
  11.   
  12. SQL> -- 有条件的 FIRST INSERT语句  
  13. SQL> -- 对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。  
  14.  insert first  
  15.      when sal>1000 then  
  16.      into test1 (empno,sal,mgr) values (empno,sal,mgr)  
  17.      when comm<500 then  
  18.      into test1 (empno,comm,mgr) values(empno,comm,mgr)  
  19.      select empno,sal,mgr,comm  
  20.      from emp;  
  21.   
  22. 已创建12行。  

4 旋转INSERT (行转列插入)

对查出的每条数据都进行插入操作

  1. -- 旋转INSERT (行转列插入)  
  2. insert all    
  3.     into sales_info values(employee_id,week_id,sales_mon)    
  4.     into sales_info values(employee_id,week_id,sales_tue)    
  5.     into sales_info values(employee_id,week_id,sales_wed)    
  6.     into sales_info values(employee_id,week_id,sales_thur)    
  7.     into sales_info values(employee_id,week_id,sales_fri)    
  8.     select employee_id,week_id,sales_mon,sales_tue,    
  9.     sales_wed,sales_thur,sales_fri 
  10.     from sales_source_data; 

效果:

  1. --原表  
  2. select * from sales_source_data;    
  3. EMPLOYEE_ID    WEEK_ID  SALES_MON  SALES_TUE  SALES_WED SALES_THUR  SALES_FRI    
  4. ----------- ---------- ---------- ---------- ---------- ---------- ----------    
  5.         176          6       2000       3000       4000       5000       6000    
  6. -- 转存后的表  
  7. select * from sales_info;    
  8. EMPLOYEE_ID       WEEK      SALES    
  9. ----------- ---------- ----------    
  10.         176          6       2000    
  11.         176          6       3000    
  12.         176          6       4000    
  13.         176          6       5000    
  14.         176          6       6000 

 例子:

  1. insert all
  2. into CM_NOTICE_CONTROL_SETTINGS (OPERATE_USERID, NOTICE_SENDING_FLAG ,CREATORID) values(USERID,'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY',USERID)
  3. select distinct USERID from CM_LOGINUSERINFO where USERID is not null;
  1. //取前5条记录插入
  2. insert all
  3. into CM_NOTICE_CONTROL_SETTINGS (OPERATE_USERID, NOTICE_SENDING_FLAG ,CREATORID)
  4. values(USERID,'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY',USERID)
  5. select *
  6. from (
  7.      select distinct USERID
  8.      from CM_LOGINUSERINFO
  9.      where USERID is not null
  10.      )
  11. where rownum<=5;
  1. //6-10条记录插入
  2. insert all
  3. into CM_NOTICE_CONTROL_SETTINGS (OPERATE_USERID, NOTICE_SENDING_FLAG ,CREATORID)
  4. values(USERID,'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY',USERID)
  5. select USERID
  6. from(
  7.   select rownum as no,USERID
  8.   from (
  9.        select distinct USERID
  10.        from CM_LOGINUSERINFO
  11.        where USERID is not null
  12.        )
  13.   where rownum<=10
  14.    )
  15. where no>=6 and no<=10;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/871240
推荐阅读
相关标签
  

闽ICP备14008679号