SQL在navicat里执行成功,但是程序中报错

由于是在Oracle上执行的,所以是没有Values关键字的

<insert id="insert">
        insert into CARGO_CONTENTS (CARGO_ID,MATE_ID,CASE_NUM,REMARK,SPEC,EQUIPMENT_TYPE_ID,CLABS)
        select * from
        <foreach open="(" close=")" collection="contents" item="item" index="index" separator="UNION ALL">
            select
            #{item.cargoID} as cargoId,
            #{item.mateID} as mateId,
            #{item.caseNum} as caseNum,
            #{item.remark} as remark,
            #{item.spec} as spec,
            #{item.equipmentTypeID} as equipmentTypeID,
            #{item.clabs} as clabs
            from DUAL
        </foreach>
    </insert>

图片说明图片说明
图片说明

第一,inert语法后面没有逗号和value(),请仔细检查。
第二,select * from 后面如果是for循环的临时表,那么这一段代码需要大小括号包围并且起一个临时名字。

区别在于你在navicat中插入的是一条,那最外面的select * from去掉改成下面这样试试。另外insert into 表 select 语句不管在oracle还是mysql都是可以省略values关键字的

    <foreach collection="contents" item="item"  separator="UNION ALL" close=";">
    <trim prefix="(" suffix=")" suffixOverrides="UNION ALL" >
        select 
        <trim suffixOverrides="," >
           #{item.cargoID} as cargoId,
            #{item.mateID} as mateId,
            #{item.caseNum} as caseNum,
            #{item.remark} as remark,
            #{item.spec} as spec,
            #{item.equipmentTypeID} as equipmentTypeID,
            #{item.clabs} as clabs
         </trim>
         from dual
    </trim>
    </foreach>