亿峰moc 2015-08-21 01:57 采纳率: 50%
浏览 7290
已采纳

求经验!Mybatis 针对Oracle数据库如何写“多条件”批量删除语句?

我的写法:

  <delete id="delMultiByIds2" parameterType="java.util.List">  
  delete from tb_duty where
    <foreach collection="list" item="item" index="index" separator="or">  
       ( dscd=#{item.dscd}, 
       and unit_id=#{item.unitId},
       and year=#{item.year},
       and month=#{item.month},
       and flag=#{item.flag} )
    </foreach> 
</delete>

语句的语法没错,只是无法删除数据库中的记录,肯定是语句的写法有问题。
图片说明
希望有经验的高手指教一把!

  • 写回答

8条回答 默认 最新

  • 亿峰moc 2015-08-22 09:02
    关注

    问题解决后兴奋地写下:
    程序批量删除无法删除的主要问题最终还是在sql语句上,虽然debug日志上能看到sql语句和参数都没有问题,但是!sql语句执行的时候并没有拿到这些个参数。经调试,将foreach中参数赋值的写法由原先的

     <foreach collection="list" item="item" index="index" separator="union all">  
         。。。B.dscd=#{item.dscd} and B.unit_id=#{item.unitId} 。。。
        </foreach>
    

    修改为:

     <foreach collection="list" item="item" index="index" separator="union all">  
         。。。B.dscd=${item.dscd} and B.unit_id=${item.unitId} 。。。
        </foreach>
    

    至此,困扰我许久的问题得以解决!
    附:Mybatis针对Oracle数据库“多条件”批量删除的mapper.xml

     <!-- 批量删除值班表 -->
     <delete id="delMultiByIds2" parameterType="java.util.List"> 
      delete from tb_duty A
      where exists 
      ( 
       select 1 from(
        <foreach collection="list" item="item" index="index" separator="union all">  
         select  B.* from tb_duty B where 1=1 and  B.dscd=${item.dscd} and B.unit_id=${item.unitId} and 
          B.year=${item.year} and B.month=${item.month} and B.flag=${item.flag} 
        </foreach>
        )S where  A.duty_id=S.duty_id
      )
    </delete>
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理