由于是在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>