Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1184704
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2008-04-16 20:35:39

数据类型不一致引发的问题
执行以下SQL后,报ORA-01722: invalid number
select distinct serial_number,
            to_char(first_fire_date,'mm-dd-yyyy') first_fire_date,
            cis.installation_engineer,
            cis.technology,
            customer_name,
            CCS.site_nm,
            email_id
       from CTSV_INSTALL_SCHEDULE    cis,
            CTSV_RFR_RED_FLAG_REVIEW crrfr,
            ctst_customer_site       ccs,
            prty                     p
      where CRRFR.UNIT_NUMBER =
            DECODE(CIS.SERIAL_NUMBER,
                   'NON-US',
                   CIS.ALTERNATE_SERIAL_NUMBER,
                   CIS.SERIAL_NUMBER)
        AND FIRST_FIRE_STATUS <> 'RELEASE'
        and first_fire_date between sysdate and sysdate + 14
        and ccs.unit_number_id = cis.unit_number
        and DECODE(p.lst_nm, NULL, p.frst_nm, p.lst_nm || ', ' || p.frst_nm) =
            cis.installation_engineer
         order by serial_number;
把sysdate + 14改为13后,却能正确执行,而且测试过sysdate + 13+7/24,也正确,输出sysdate + 13+7/24后,报错时刚好到4月29号0时。而且过了几分钟后,sysdate + 13+7/24也开始报错,因为到了下一个小时。
开始以为是sysdate + 14的问题。经过一步一步的删除where中的条件后,最后发现问题在ccs.unit_number_id = cis.unit_number,左边是number类型的,右边是varchar2类型的,因此某些数据转不过去,而且因为这些数据中又有某些条件刚好满足在4月29号0时,因此发生了错误ORA-01722: invalid number。
阅读(1129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~