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