最近在项目中需要使用oracle+mybatis批量插入数据,因为自增主键,遇到问题,现记录如下:

一、常用的两种sql写法报错

1、insert ... values ...

 <insert id="batchInsert1" parameterType="java.util.List" useGeneratedKeys="false">
  insert all
  <foreach collection="list" item="item" index="index">
    into TableName(id, name) values(TableName_sequence.nextval, #{item.name})
  </foreach>
  <!-- 必须加下面的查询 -->
  SELECT 1 FROM DUAL
</insert>

报错结果:java.sql.SQLException: ORA-00001: 违反唯一约束条件...

2、insert ... select ...

 <insert id="batchInsert2" parameterType="java.util.List" useGeneratedKeys="false">
  insert into TableName(id, name)
  <foreach collection="list" item="item" separator="union all">
    select tableName_sequence.nextval, #{item.name} from dual
  </foreach>
</insert>

报错结果:java.sql.SQLException: ORA-02287: 此处不允许序号

二、解决办法:

1、使用函数包装序列

 create or replace function table_getSeq return number is
Result number;
begin
select TableName_sequence.nextval into Result from dual;
return(Result);
end table_getSeq ;

将两种sql中的“tableName_sequence.nextval”替换为函数名“table_getSeq”

2、使用触发器

 create or replace trigger table_insert
  before insert on tableName 
  for each row
begin
  select TableName_sequence.nextval into :new.id from dual;
end;

将两种sql中关于id的字段去掉即可

最新文章

  1. Unable to open the physical file xxxx. Operating system error 2
  2. KnockoutJS 3.X API 第三章 计算监控属性(1) 使用计算监控属性
  3. TJI读书笔记13-内部类
  4. js中加密及设置cookie
  5. Hadoop第9周练习—Hive部署测试(含MySql部署)
  6. [CareerCup] 12.1 Find Mistakes 找程序错误
  7. html css js
  8. check_area
  9. Swift开发学习(两):Playground
  10. 微软不也是从Altair Basic这丑小鸭长成白天鹅吗?
  11. size_t类型
  12. 重启虚拟机后dhclient进程未运行解决办法
  13. bzoj4555(多项式求逆解法)
  14. 大数据量时 Mysql LIMIT如何正确对其进行优化(转载)
  15. 进入Linux单用户模式
  16. idea中maven中jdk版本的选择(转)
  17. 动态替换iframe的src及动态改变iframe的高度
  18. hpu 1267 Cafeteria (01背包)
  19. ASP.NET 仿腾讯微博提示“还能输入*个字符”的实现
  20. [Cookie] Read Cookie and Pass in headers

热门文章

  1. ProjectEuler237 Tours on a 4 x n playing board
  2. service worker在移动端H5项目的应用
  3. RHEL6 学习:使用 cryptsetup 给分区加密
  4. springboot 详解RestControllerAdvice(ControllerAdvice)(转)
  5. 【JAVA-算法】 截取2个字符中间的字符串
  6. Noip2011 提高组 Day1 T3 Mayan游戏
  7. Neo4j (1)创建节点
  8. RabbitMQ的下载与安装
  9. 7.20套娃(tao)
  10. 【java设计模式】-02工厂模式