oracle批量插入,自增主键出现的问题。
来源:互联网 发布:mac机 rz文件 编辑:程序博客网 时间:2024/06/05 10:12
两种oracle批量插入的实例。
oracle自增主键批量插入会出现错误。不使用自增主键是不会报错的。
Java 程序 调用批量插入的方法:
List<CategoryExpertGrade> categoryExpertGrades=new ArrayList<CategoryExpertGrade>(); CategoryExpertGrade c1=new CategoryExpertGrade(); CategoryExpertGrade c2=new CategoryExpertGrade(); c1.setGrade("C"); c2.setGrade("D"); c1.setExpertFk(124L); c2.setExpertFk(124L); c1.setCategoryFk(4171L); c2.setCategoryFk(4172L); categoryExpertGrades.add(c1); categoryExpertGrades.add(c2); int i=categoryExpertGradeMapper.insertList(categoryExpertGrades);
第一种:
mybatis sql语句:
<insert id="insertList" > insert into CATEGORY_EXPERT_GRADE (PK, CATEGORY_FK, EXPERT_FK, GRADE, SAVE_DATE, FLAG, EXTEND1, EXTEND2, EXTEND3 ) <foreach collection="recordList" item="i" close=" " open=" " separator=" union all "> select Sequence_Shzj.nextval , '${i.categoryFk}' , '${i.expertFk}' , '${i.grade}' , '${i.saveDate}' , '${i.flag}' , '${i.extend1}' , '${i.extend2}' , '${i.extend3}' from dual </foreach> </insert>
出错结果:
### SQL: insert into CATEGORY_EXPERT_GRADE (PK, CATEGORY_FK, EXPERT_FK, GRADE, SAVE_DATE, FLAG, EXTEND1, EXTEND2, EXTEND3 ) select Sequence_Shzj.nextval , '4171' , '124' , 'C' , '' , '' , '' , '' , '' from dual union all select Sequence_Shzj.nextval , '4172' , '124' , 'D' , '' , '' , '' , '' , '' from dual e: java.sql.SQLException: ORA-02287: 此处不允许序号
第二种:
mybatis sql语句
<insert id="insertList" > insert ALL <foreach collection="recordList" item="i" close=" " open=" " separator=" "> into CATEGORY_EXPERT_GRADE (PK, CATEGORY_FK, EXPERT_FK, GRADE, SAVE_DATE, FLAG, EXTEND1, EXTEND2, EXTEND3 ) values (Sequence_Shzj.nextval, #{i.categoryFk,jdbcType=DECIMAL}, #{i.expertFk,jdbcType=DECIMAL}, #{i.grade,jdbcType=VARCHAR}, #{i.saveDate,jdbcType=DATE}, #{i.flag,jdbcType=DECIMAL}, #{i.extend1,jdbcType=VARCHAR}, #{i.extend2,jdbcType=VARCHAR}, #{i.extend3,jdbcType=VARCHAR} ) </foreach> SELECT 1 FROM DUAL </insert>
错误结果:
### SQL: insert ALL into CATEGORY_EXPERT_GRADE (PK, CATEGORY_FK, EXPERT_FK, GRADE, SAVE_DATE, FLAG, EXTEND1, EXTEND2, EXTEND3 ) values (Sequence_Shzj.nextval, ?, ?, ?, ?, ?, ?, ?, ? ) into CATEGORY_EXPERT_GRADE (PK, CATEGORY_FK, EXPERT_FK, GRADE, SAVE_DATE, FLAG, EXTEND1, EXTEND2, EXTEND3 ) values (Sequence_Shzj.nextval, ?, ?, ?, ?, ?, ?, ?, ? ) SELECT 1 FROM DUAL### Cause: java.sql.SQLException: ORA-00001: 违反唯一约束条件 (XIAOMI.PK_CATEGORY_EXPERT_GRADE), PK 的值是相同的。
上面的两种批量插入的方式都不能使用序列。
解决办法:
写一个函数包装一下序列:
create or replace function get_seq return number is Result number;begin select Sequence_Shzj.nextval into Result from dual; return(Result);end get_seq;
sql语句中的Sequence_Shzj.nextval都替换成get_seq;
阅读全文
0 0
- oracle批量插入,自增主键出现的问题。
- mybatis批量插入,主键自增问题
- Mybatis批量插入返回自增主键
- Mybatis批量插入返回自增主键
- oracle批量插入(insert)ID自增问题
- Mybatis+Mysql批量插入返回自增主键
- ORACLE 批量插入 主键为自增序列 有几个字段数据从其他表导入的 有几个是固定的
- 向oracle插入记录的同时获得插入的自增主键值
- 关于ORACLE自增主键的处理问题
- 插入数据返回自增的主键
- 获取刚刚 插入的自增主键
- oracle结合mybatis 实现自增主键的insert和批量insert功能(未完)
- MyBatis+Oracle带自增主键的批量添加、修改、模糊查询
- oracle 解决主键自增问题
- mybatis oracle 批量插入返回主键
- Oracle用触发器实现插入数据主键自增
- Oracle用触发器实现插入数据主键自增
- Oracle数据库插入多条数据,主键自增
- oracle数据库突然无法连接
- 功能: 登录界面打开主界面功能 (学习日记 2017-05-27)
- Android AlertDialog中EditText无法弹出输入法
- 算法——Android中读取json中的值
- Mysql的两个重点优化和数据对比
- oracle批量插入,自增主键出现的问题。
- 编译osgCal心得,以及cmake使用
- 如何将FAT32无损转换成NTFS格式
- Linux下的tar压缩命令
- HN2015集训 永远亭的竹笋采摘
- App测试方法总结
- 使用SDK自带工具查看sqlite数据库
- 姜饼人:旅行才是我真正的人生(图灵访谈)
- php中header函数参数的Cache-control的使用方法