Oracle数据库使用mybatis的foreach标签应注意的问题

使用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()
特此记录

你可能感兴趣的:(MyBatis,相关,Oracle,相关)