在做excel导入的时候需要用到批量导入,以前没用过oracle数据库,使用过程中才发现mysql的写法在oracle中是不正确的。
先介绍下foreach 中属性的表达意思:
1、 collection :collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合。
2、item : 表示在迭代过程中每一个元素的别名。
3、index :表示在迭代过程中每次迭代到的位置
4、open :前缀
5、close :后缀
6、separator :分隔符,表示迭代时每个元素之间以什么分隔
先上一下mybatis中foreach的代码:
<insert id="saveList" parameterType="java.util.List">
INSERT INTO mds_quota_detail(
id,
mds_quota_id,
serial,
mds_item_id,
item_code,
item_name,
normal_field,
model_num,
specs,
quota,
mds_unit_id,
classify,
remarks
)
VALUES
<foreach collection="list" item="MdsQuotaDetail" index="index" separator="," >
(
#{id},
#{mdsQuotaId},
#{serial},
#{itemId},
#{itemCode},
#{itemName},
#{normalField},
#{modelNum},
#{specs},
#{quota},
#{mdsUnitId},
#{classify},
#{remarks}
)
</foreach>
</insert>
oracle中foreach的代码:
<insert id="saveList" parameterType="java.util.List">
INSERT INTO mds_quota_detail(
id,
mds_quota_id,
serial,
mds_item_id,
item_code,
item_name,
normal_field,
model_num,
specs,
quota,
mds_unit_id,
classify,
remarks
)
<foreach collection="list" item="MdsQuotaDetail" index="index" separator="UNION ALL" >
(
SELECT
#{MdsQuotaDetail.id},
#{MdsQuotaDetail.mdsQuotaId},
#{MdsQuotaDetail.serial},
#{MdsQuotaDetail.itemId},
#{MdsQuotaDetail.itemCode},
#{MdsQuotaDetail.itemName},
#{MdsQuotaDetail.normalField},
#{MdsQuotaDetail.modelNum},
#{MdsQuotaDetail.specs},
#{MdsQuotaDetail.quota},
#{MdsQuotaDetail.mdsUnitId},
#{MdsQuotaDetail.classify},
#{MdsQuotaDetail.remarks}
FROM dual
)
</foreach>
</insert>
总结:1、在oracle中是没有values的。
2、在oracle中separator的值为union all,mysq'中是","。
3、在oracle中foreach中使用SELECT ... FROM dual。
4、在foreach中#{属性值},oracle中必须是item的值点属性。
如有哪里不对的地方,欢迎在评论里指出