ORACLE ORA-01000: 超出打开游标的最大数(解决及原因)

在for循环中调用数据库插表语句,容易造成ORA-01000: 超出打开游标的最大数的问题,主要原始是用CONNECTION 创建了 PREPAREDSTATEMENT ,用完了 PREPAREDSTATEMENT 后,没有关闭PREPAREDSTATEMENT,导致游标一直处于打开状态,因此在大数据访问量的情况下很容易出现数据库游标使用到最大,无法分配游标错误。

解决方式:

通过批量插入的方式:

oracle批量插入语句:

INSERT ALL 
INTO TABLEA(field_1,field_2) VALUES (value_1,value_2) 
INTO TABLEA(field_1,field_2) VALUES (value_3,value_4) 
INTO TABLEA(field_1,field_2) VALUES (value_5,value_6)
SELECT 1 FROM DUAL;

在mybatis中,需要将最后的一个;号去掉,并且mybatis批量插入oracle时需要显式指定为 useGeneratedKeys="false"

<insert id="addList" parameterType="java.util.List" useGeneratedKeys="false">
    INSERT ALL
    <foreach item="item" index="index" collection="list">
    INTO T_APPLAUD
    (
        ID,
        USER_ID,
        BUSINESS_TYPE,
        PRODUCT_ID,
        CREATE_TIME
    ) VALUES
    (
        #{item.id, jdbcType=NUMERIC},
        #{item.userId, jdbcType=VARCHAR},
        #{item.businessType, jdbcType=VARCHAR},
        #{item.productId, jdbcType=VARCHAR},
        #{item.createdTime, jdbcType=NUMERIC} 
    )
    </foreach>
    SELECT 1 FROM DUAL
</insert>
<insert id="insertMedadata" parameterType="String" useGeneratedKeys="false">
    ${insertSql}
</insert>

另外一种方法是 insert into table(...) (select ... from dual) union all (select ... from dual)

<insert id="addList" parameterType="java.util.List" useGeneratedKeys="false">
    INSERT INTO T_APPLAUD
    (
        ID,
        USER_ID,
        BUSINESS_TYPE,
        PRODUCT_ID,
        CREATE_TIME
    )
    <foreach item="item" index="index" collection="list" separator="union all">
    (
        SELECT 
            #{item.id},
            #{item.userId},
            #{item.businessType},
            #{item.productId},
            #{item.createdTime} 
        FROM DUAL
    )
    </foreach>
</insert>
<insert id="insertBatch">
    INSERT INTO t_user
            (id, name, del_flag)
    VALUES
    <foreach collection ="list" item="user" separator =",">
         (#{user.id}, #{user.name}, #{user.delFlag})
    </foreach >
</insert>

猜你喜欢

转载自blog.csdn.net/wangchaox123/article/details/89533073