posts - 60,comments - 71,trackbacks - 0

         在ORACLE中进行关联查询时,作为关联查询的两字段数据类型要一至,否则会报:

       ORA-01722:invalid number 

这样的错误,如下查询语句:

      select  * from A a,B b  where a.loginid=b.userid;

        如果a.loginid的数据类型为:number(n),而b.userid的数据类型为:varchar2(n),则会报上面的错误,要二者为同一数据类型,上面的查询语句才能正确的被执行,平时可能在做一些查询统计时没注意这些问题(可能表结构是别人事先已经建好了的,而我们只是去使用而于),所以当我们在设计表结构时,如果以后某两表(或多表)之间存在关联关系,即查询相关数据时,要关联它们之间的某些字段,这时我们就要注意了,要将到时可能用于关联查询的字段的数据类型设计为相同的类型,当然字段长度可以不一样,这样到时关联查询时就不会有问题了,否则以后还要改字段数据类型,而且此时表中又有了数据,为了防止数据丢失,改起来还有点麻烦.

       这种问题在ORACLE关系数据库中会出现,在其它关系数据库中不知道会不会出现,猜测可能也会有类似问题.

       注:  这可能是一个很简单的问题,但这确可能是很容易忽视的问题,有时在设计表结构时,可能会由于考虑不周,造成以后要关联查询相关数据时出现上面的错误,从而要去改变表的字段类型,从而带来一些不必要的麻烦.
posted on 2009-04-09 16:49 henry1451 阅读(1588) 评论(2)  编辑  收藏

FeedBack:
# re: Oracle关联查询时对关联字段的数据类型要求
2009-04-09 21:05 | 123
没对吧  回复  更多评论
  
# re: Oracle关联查询时对关联字段的数据类型要求
2009-04-10 18:08 | henry1451
不好意思,上面说的是有些地方不正确,现在将一些不正确的地方做一些改正:

1)上面举到的例子中,当a.loginid的数据类型为:number(n),而b.userid的数据类型为:varchar2(n),
是不一定会报那个错误的,即有可能不会报错,即当b.userid的数据内容全部为阿拉伯数字"0-9"时,是
不会报错的,因为ORACLE会对b.userid字段类型进行隐式转换,将字符串类型隐式转换为number,所以当
B表中的b.userid字段内容有英文字符或其他字符时,则会报那个错误,否则,当数据内容全部为"0-9"这样的数字时,关联查询是不
会报那个错误的;

2)上面提到当关联的两字段数据类型不一至时,会报: ORA-01722:invalid number ,这也是不整确的,即当
当一个字段类型为number,一个为:varchar时,如果报错,才会报:ORA-01722:invalid number这样的错误,如果
其中一个字段为日期型,或其他类型时,报的则是另外的一种错误,而不都是: ORA-01722:invalid number这样的错误.  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: