<insert id="addAppKeysModels" parameterType="java.util.List" useGeneratedKeys="false">
INSERT INTO APP_KEYS_MODEL_USER
SELECT SEQ_APP_KEYS_MODEL_USER.NEXTVAL, A.*
FROM(
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT
#{item.shortCode},
#{item.name},
#{item.userName}
FROM dual
</foreach>
) A
</insert>
<!--批量入库app信息 UNION -->
<insert id="addAppKeysModels" parameterType="java.util.List" useGeneratedKeys="false">
INSERT INTO APP_KEYS_MODEL_USER
SELECT SEQ_APP_KEYS_MODEL_USER.NEXTVAL, A.*
FROM(
<foreach collection="list" item="item" index="index" separator="UNION">
SELECT
#{item.shortCode},
#{item.name},
#{item.userName}
FROM dual
</foreach>
) A
</insert>
例子:
select 'order' from dual union all select 'order' from dual; --不会去重
select 'order' from dual union select 'order' from dual; --会去重
注意:
<insert id="addAppKeysModels" parameterType="java.util.List" useGeneratedKeys="false">
一定要加上useGeneratedKeys="false",否则会报ora-00933: sql 命令未正确结束
如果是 Oracle 这样不支持自增主键列的数据库,如果把useGeneratedKeys 参数配置为 true,在插入多条数据时则可能会出现 ORA-00933: SQL command not properly ended
这样的错误。这时,可以将 useGeneratedKeys 配置为 false,或者为了保证兼容性,使用 mybatis 提供的 selectKey 手动提供类似自增序列的效果。