警惕SQL中間的NULL

如此相信發表於2022-03-09

警惕SQL中間的NULL

select * from dual where null like '%*%'

no record found.
在做一個資料處理的應用的時候,因為忽略了這個,導致資料被多多處理了。
一下是出問題的SQL:

 update CR_VIP_BKG_VIEW_LOAD d
       set d.total_cntr_qntt       = null,
           d.total_cntr_qntt_20    = null,
           d.total_cntr_qntt_40    = null,
           d.total_cntr_qntt_40_hq = null,
           d.total_cntr_qntt_45_hq = null,
           d.total_cntr_qntt_other = null
     where rowid not in
           (SELECT MAX(ROWID)
              from CR_VIP_BKG_VIEW_LOAD d
             WHERE (d.cntr_check_digit not like '%*%' or
                    d.cntr_check_digit is null)
             GROUP BY d.bkg_num, d.svc_prod_comp_id);
紅色的謂詞是改正之後的。因為缺失了對NULL的處理以及 NOT IN的條件,導致update語句更新了多於預期的資料條數,導致了bug.
寫在這裡是為了供日後更好的參考


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014873/viewspace-2868094/,如需轉載,請註明出處,否則將追究法律責任。

相關文章