zoukankan      html  css  js  c++  java
  • Mybatis 批量插入数据 关于Oracle 批量插入报错:ORA-00933: SQL 命令未正确结束

    问题:用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 id="insertclobtest2" parameterType="com.inspur.tax.sjaqgl.sjflfjgl.data.ClobEntity">
            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 id="insertclobtest3" parameterType="com.inspur.tax.sjaqgl.sjflfjgl.data.ClobEntity">
            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 id="addBatch" parameterType="java.util.List">  
        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 id="insertclobtest1" parameterType="com.inspur.tax.sjaqgl.sjflfjgl.data.ClobEntity">
            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 id="insert_" useGeneratedKeys="false">  </insert>

  • 相关阅读:
    敏捷之旅--携程境外租车团队敏捷实践
    (一)LoadRunner安装
    性能测试,相关术语解析
    Newtonsoft.Json
    主流浏览器基于哪些内核?
    火狐浏览器与谷歌浏览器区别在哪里?
    带宽计算-大B与小b的区别
    loadrunner11录制不成功解决方法
    代码中的事务约束
    IOC框架Ninject实践总结
  • 原文地址:https://www.cnblogs.com/yysbolg/p/13527129.html
Copyright © 2011-2022 走看看