问题:用mybaits 批量插入数据到Oracle 数据库的时候,
报错:ORA-00933: SQL 命令未正确结束 / ORA-00933: SQL command not properly ended ;意思就是 语法错误
原因:
oracle 批量插入与mysql 的批量插入的方式是不同的,
insert into tablename()values(),(),(); ---这个是mysql 的批量插入形式
insert all into tablename() values() into tablename() values() -------这个是Oracle批量插入形式
下面是 Mybaits:oracle数据库批量插入数据的样式:
//方式1: <insert > INSERT ALL <foreach collection="list" item="item" index="index"> INTO ainsertclob (id, blobtest) VALUES (#{item.id}, #{item.blobtest}) </foreach> select 1 from dual </insert> //方式2: <insert > INSERT INTO ainsertclob (id, blobtest) <foreach collection="list" item="item" index="index" separator="union all"> SELECT #{item.id} ,#{item.blobtest} from dual </foreach> </insert> // 方式3: <insert > BEGIN <foreach collection="list" item="item" index="index" separator=""> insert into blacklist (id, userid, deviceid, createdate, updatedate, "LEVEL") VALUES ( USER_INFO_SEQ.NEXTVAL,#{item.userId,jdbcType=INTEGER},#{item.deviceId,jdbcType=VARCHAR}, #{item.createDate,jdbcType=DATE},sysdate, #{item.level,jdbcType=INTEGER} ); </foreach> COMMIT; END; </insert>
下面是Mybaits: mysql 数据库批量插入数据的例子:
<insert >
INSERT INTO ainsertclob (id, blobtest) VALUES
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.blobtest})
</foreach>
</insert>
Mybatis,oracle,ORA-00933: SQL 命令未正确结束
原因是:批量插入时,如果没有主键,一定要显式指定useGeneratedKeys为false,否则会报: SQL 命令未正确结束
<insert > </insert>