【发布时间】:2015-06-29 17:50:06
【问题描述】:
我是 MyBatis 的新手。我正在尝试对一个 ORACLE db 表进行批量插入。这是 XML 映射器文件中的代码,
<insert id="insertAuditLogAsBatch" >
insert into AUDIT_LOG (ID,ENTITY_ID,PERIOD_ID )
select SEQ_AUDIT_LOG.nextval, entityId, periodId
from
<foreach collection="auditLogs" item="auditLog">
( SELECT 1 as entityId, 1 as periodId FROM DUAL UNION ALL )
</foreach>
SELECT * FROM dual
</insert>
这是一个示例代码,我正在尝试保留硬编码值。
上述程序从 Oracle 抛出以下错误,
;糟糕的 SQL 语法 [];嵌套异常是 java.sql.BatchUpdateException: ORA-00928: missing SELECT keyword
从我的代码生成的批处理 SQL 在右括号')'之前的末尾有一个“UNION ALL”。我需要的如下,对于最后一个 select 语句我最后不需要'UNION ALL'。我的问题是,
- 我能否检查 foreach 中的某些条件,以便最后一个 select 不会有“UNION ALL”。相反,我们应该使用 ')' 括号来指示 SELECT 语句的结束。
- 此行插入是批处理的吗?我在这里尝试使用 MyBatis 测试批处理操作。
【问题讨论】:
标签: oracle mybatis sql-insert