程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> mybatis-求經驗!Mybatis 針對Oracle數據庫如何寫“多條件”批量刪除語句?

mybatis-求經驗!Mybatis 針對Oracle數據庫如何寫“多條件”批量刪除語句?

編輯:編程綜合問答
求經驗!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>

語句的語法沒錯,只是無法刪除數據庫中的記錄,肯定是語句的寫法有問題。
圖片說明
希望有經驗的高手指教一把!

最佳回答:


問題解決後興奮地寫下:
程序批量刪除無法刪除的主要問題最終還是在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>


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved