ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 警惕SQL中间的NULL

警惕SQL中间的NULL

原创 Linux操作系统 作者:abstractcyj 时间:2013-05-10 14:28:04 0 删除 编辑
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博客 ” ,链接:https://blog.itpub.net/8520577/viewspace-760773/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    602
  • 访问量
    1091654