使用mybatis做数据持久化操作的时候,遇到一个问题,基于oracle数据库做insert操作时,如果使用mybatis的foreach标签,会报错,原来的insert语句如下:
insert into tbl_marketing_activities
(id,owner,type,name,state,startdate,enddate,budgetcost,actualcost,description,createby,createtime)
values
(#{obj.id},#{obj.owner},#{obj.type},#{obj.name},#{obj.state},#{obj.startDate},#{obj.endDate},#{obj.budgetcost},#{obj.actualcost},#{obj.description},#{obj.createBy},#{obj.createTime})
执行之后,报错:“sql未正确结束”,查阅相关资料以后,发现oracle数据库不支持原生的foreach操作,修改之后,语句如下:
insert into tbl_marketing_activities
(id,owner,type,name,state,startdate,enddate,budgetcost,actualcost,description,createby,createtime)
select t.* from(
select
#{obj.id},#{obj.owner},#{obj.type},#{obj.name},#{obj.state},#{obj.startDate},#{obj.endDate},#{obj.budgetcost},#{obj.actualcost},#{obj.description},#{obj.createBy},#{obj.createTime}
from dual
) t
此处注意,separator应使用union all,并且用select * from dual 语句代替values()
特此记录