Oracle中以insert values的形式同时插入多条记录(批处理操作insert、update、delete)

由于要做测试数据插oracle数据库,想到了mysql的多个values的形式,但是sql报错。oracle并不支持这种一个insert into 多个values的方法:


INSERT INTO users(name, age) VALUES('ccc', 333), ('aaa', 222), ('bbb', 111);  

但是有另一种写法,做个简单记录,跟mysql中的一个insert多个values的形式差不多。


INSERT ALL INTO tb_red VALUES(1000, 8001, '2016-10-10 10:59:59', 1, 8001, '测试用户1000', '红名单0', '男', '膜法学院', '被测')  
INTO tb_red  VALUES (1001, 8001, '2016-10-10 11:00:00', 2, 8001, '测试用户1001', '红名单1', '男', '膜法学院', '被测')  
INTO tb_red  VALUES (1002, 8001, '2016-10-10 11:00:01', 0, 8001, '测试用户1002', '红名单2', '男', '膜法学院', '被测')  
INTO tb_red  VALUES (1003, 8001, '2016-10-11 10:59:59', 1, 8001, '测试用户1003', '红名单3', '男', '膜法学院', '被测')  
INTO tb_red  VALUES (1004, 8001, '2016-10-11 11:00:00', 2, 8001, '测试用户1004', '红名单4', '男', '膜法学院', '被测')  
INTO tb_red  VALUES (1005, 8001, '2016-10-11 11:00:01', 0, 8001, '测试用户1005', '红名单5', '男', '膜法学院', '被测')  
select 1 from dual; 

说明:

1.第一句用的是insert all into 不是 insert into

2.最后跟的selecr 1 from dual语句中的dual表可以被替换为任何一个只要不是tb_red的表

3.和mysql的写法不一样,多个values之间不用逗号分隔,但是需要加into tablename的形式的语句在每个values前面

4.只适合于Oralce 9i以上版本

mybatis中批量操作:
批量插入:


        INSERT INTO t_privilege (type, name, key,url,sort,parent_key) VALUES
        
            (
            #{item.type},
            #{item.name},
            #{item.key},
            #{item.url},
            #{item.sort},
            #{item.parentKey}
            )
        
    

运行通过。在Oracle的版本中,有几点需要注意的:

    1.SQL中没有VALUES;

    2.标签中的(selece ..... from dual);

    3.标签中的separator的属性为"UNION ALL",将查询合并结果集。

    4.批量插入时,如果没有主键,一定要显式指定useGeneratedKeys为false,否则会报: SQL 命令未正确结束。

批量更新:

  
     begin    
           
             update table_name  
               
                 name= #{item.name}  
               
             where id = #{item.id}  
           
         ;end;  
 

或者


  
     
      update table_name  
        
         name= #{item.name}  
        
         where id = #{item.id}  
     
 

批量删除:

  
   delete from table_name  
     
            
  id=#{item.id}  
       
     
 

你可能感兴趣的:(Oracle中以insert values的形式同时插入多条记录(批处理操作insert、update、delete))