oracle,mybatisplus不支持批量插入

jeecg-boot框架,mybatisplus+oracle批量插入报错。
试了多种语法,均报错。

    <!-- 方式一 (begin insert into ... end;)不可用-->
    <insert id="setCodes" useGeneratedKeys="false">
        <foreach collection="list" item="zzCode" separator=" " open="begin" close="end;">
            INSERT INTO ZZ_CODE
            <trim prefix="(" suffix=")" suffixOverrides=",">
                <if test="zzCode.code != null">CODE</if>
                <if test="zzCode.zName != null">Z_NAME</if>
                <if test="zzCode.remark != null">REMARK</if>
            </trim>
            <trim prefix="values (" suffix=");" suffixOverrides=",">
                <if test="zzCode.code != null">#{zzCode.code}</if>
                <if test="zzCode.zName != null">utl_raw.cast_to_nvarchar2(#{zzCode.zName}</if>
                <if test="zzCode.remark != null">#{zzCode.remark}</if>
            </trim>
        </foreach>
    </insert>

    <!-- 方式二 (insert all into into ... select)不可用-->
    <insert id="setCodes2">
        INSERT ALL
        <foreach collection="list" item="zzCode">
            INTO ZZ_CODE(CODE, Z_NAME, REMARK) VALUES(#{zzCode.code}, utl_raw.cast_to_nvarchar2(#{zzCode.zName}), #{zzCode.remark})
        </foreach>
        select 1 from dual
    </insert>

    <!-- 方式三 (insert into select from select from...)可用-->
    <insert id="setCodes3">
        INSERT INTO ZZ_CODE(CODE, Z_NAME, REMARK)
        <foreach collection="list" item="zzCode" separator="union all" open="(" close=")">
            select #{zzCode.code}, utl_raw.cast_to_nvarchar2(#{zzCode.zName}), #{zzCode.remark} from dual
        </foreach>
    </insert>


前两种方式报错,第三种方式可用,但是实际业务代码中,多条数据中插入的字段数量不一致,用union会报错。

img


百度了这个参数,但是不会配置,写在配置文件里面与url并列,不起作用。
求指点。

我目前已经解决该问题,特在此记录一下。还是用的方法三,为了解决union的两侧参数数量不一致的问题,在mapper.xml里面写了标签,没有值的情况直接插入NULL。

插入多条数据的语法不对,XML里面配置的最终应该类似这样:
insert into ZZ_CODE(CODE, Z_NAME, REMARK) values(1,'name1','remark1'),(2,'name2' 'remark2'),(3,'name3' 'remark3');
或者:
insert into ZZ_CODE(CODE, Z_NAME, REMARK) select CODE, Z_NAME, REMARK from table;