mybatis批处理插入异常:ORA-00933:SQL命令未正确结束



我的项目使用springboot和mybatis,我使用批处理插入语法器保存数据我使用了Oracle数据库

<sql id="site_columns">
    ID, SITE_URL, BRM_HGSSITE_ID, BRM_SITE_STATUS, BPS_HGSSITE_ID, SITE_STATUS, OP_HGSSITE_ID, BILLING_PLATFORM, BLIS_EFFECTIVE_FROM,
    BLIS_EFFECTIVE_TO, BRM_EFFECTIVE_FROM, ISSUE_TYPE, COMMENTS, CSM_FIRST_NAME, CSM_LAST_NAME, CSM_EMAIL, CREATE_TIME
</sql>

<insert id="batchSaveVerifiedSitesFromFile" parameterType="siteSummaryInfoBean">
    INSERT INTO MR_VERIFIED_SITE_LIST(<include refid="site_columns"/>) VALUES
    <foreach collection="list" item="site" separator=",">
        (MR_VERIFIED_SITE_LIST_SEQ.nextval, #{site.webexurl}, #{site.brm_hgssiteid}, #{site.brm_sitestatus},
        #{site.bps_hgssiteid}, #{site.sitestatus},
        #{site.op_hgssiteid}, #{site.billingplatform,jdbcType=VARCHAR}, #{site.blis_effectiveFrom,jdbcType=DATE},
        #{site.blis_effectiveTo,jdbcType=DATE}, #{site.brm_effectiveFrom,jdbcType=DATE},
        #{site.issueType,jdbcType=VARCHAR}, #{site.comments,jdbcType=VARCHAR},
        #{site.csmfirstname,jdbcType=VARCHAR}, #{site.csmlastname,jdbcType=VARCHAR},
        #{site.csmemail,jdbcType=VARCHAR},
        greatest(nvl(#{site.blis_effectiveTo,jdbcType=DATE},sysdate),
        nvl(#{site.brm_effectiveFrom,jdbcType=DATE},sysdate)))
    </foreach>
</insert>

oracle不支持多行插入语句。

您可以编写一个insert into ... select ... union all select ...语句,如其他答案所示。

在您的foreach循环中,分离器将为union all,环形主体将为select ... from dual

插入语句应在foreach内部。

例如,代码本身的每个循环中的覆盖$ sql变量。

最新更新