当前位置:  数据库>oracle

ORA-01722: invalid number---Oracle表连接问题

    来源: 互联网  发布时间:2017-06-24

    本文导语: select  ext.org_channel_type as ORG_CHANNEL_TYPE from channel.channel_pub_info i left join channel.sec_organize_ext ext on i.channel_id = ext.organize_id left join channel.cm_bs_static_data a on a.code_value = ext.org_channel_type and a.code_type = 'FIRST_ORG_TYPE' where 1 = 1 AND ORG_CHANN...

select
 ext.org_channel_type as ORG_CHANNEL_TYPE
 from channel.channel_pub_info i
 left join channel.sec_organize_ext ext
 on i.channel_id = ext.organize_id
 left join channel.cm_bs_static_data a
 on a.code_value = ext.org_channel_type
 and a.code_type = 'FIRST_ORG_TYPE'
 where 1 = 1
 AND ORG_CHANNEL_TYPE='80002'

在执行这条语句一直报Oracle ORA-01722: invalid number,以为是ORG_CHANNEL_TYPE='80002'的问题,改成ORG_CHANNEL_TYPE=80002后还是报这个错。而改成ORG_CHANNEL_TYPE='80009'就不会报错,只是查不出数据,因为80009这个数据没有。

原因是:channel.cm_bs_static_data的code_value 是varchar2类型,而channel.sec_organize_ext.org_channel_type是number类型,Oracle会从channel.cm_bs_static_data表中检索所有的code_value ,这样里面就有非数字的code_value ,Oracle在比较varchar与number时,会采用to_number(code_value )=ext.org_channel_type,所以会报OracleORA-01722: invalid number的错误。改成a.code_value = CAST(ext.org_channel_type AS varchar2(20))后,对ext.org_channel_type进行先转varchar再比较就可以了。

在这儿,有人就会问了,那改成ORG_CHANNEL_TYPE='80009'就不会报错?是为什么?

原因是:80009在channel.sec_organize_ext中就不存在,所以不会去执行left join channel.cm_bs_static_data a
on a.code_value = ext.org_channel_type
and a.code_type = 'FIRST_ORG_TYPE',也就不会检索code_value ,所以不会报错。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle不能删除表 ORA-00604 ORA-01422 错误
  • oracle ORA-01114、ORA-27067错误解决方法
  • 如何配置 linux 下 oracle 的 listener .ora 和
  • [Oracle] 浅析令人抓狂的ORA-01555问题
  • 安装oracle出现error:ora-01031:insufficient privilleges的解决
  • 我在Linux7。3下面装了一个Oracle8i,但是现在启动不起来了,总是报错ORA-01031: insufficient privileges
  • 关于Oracle游标的问题(ORA-01000: maximum open cursors exceeded)
  • oracle 11g导出数据时报ORA 1455错误的处理方法
  • Oracle 数据库闪回功能设置出现ORA-19809和ORA-19804错误
  • ORA-28002 Oracle 11g存在密码过期问题解决方案
  • Linux 下数据库oracle出现ORA-27102错误的解决办法
  • ORACLE出现错误1033和错误ORA-00600的解决方法
  • Oracle ORA-22908(NULL表值的参考)异常分析与解决方法
  • oracle报错(ORA-00600)问题处理
  • Oracle 10g之ORA-32004问题
  • 出现ORA-01401和ORA-01008错误?
  • 如何得到带有ora的行的下一行
  • ORA-12514及ORA-28547错误解决方案
  • 浅析如何在tnsnames.ora中配置监听
  • Orcle的package中访问其它Schema的表报错ORA-00942解决方法
  • 解决报错ora-32035的方法分析
  • aq.executeQuery: ORA-00020: maximum number of processes (59) exceeded
  • ORA-00947:Not enough values (没有足够的值)的深入分析
  • solaris10 安装 ora9.2.0.1 时报错
  • 在UNIX下,我的ORA817该怎么样才可以自己启动呀?
  • 谁能帮忙解释一下: ORA-01000 : maximun open cursors exceeded
  • zilong28提问:Tomcat3.2报错内容是Error occurs when connecting DB: ORA-00020: maximum number of processes(59) exceeded 我应该如何解决,先谢了
  • 为什么我读取数据库时出现:ORA-00600: 内部错误代码,参数: [ttcgcshnd-1], [0], [],错误?
  • 如何解决ORA-01843与NLS_DATE_FORMAT问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3