Oracle关联查询-数据类型不一致问题 ORA-01722: 无效数字

1、存在表A和表B,都包含字段user_no,但数据类型不一致,以下:table

create table A (select

  user_id varchar2(20),数据类型

  user_no number(12,0),数据

  xxx脚本

);项目

create table B (查询

  user_name varchar2(60),tab

  user_no varchar2(20),类型转换

  xxx字符

);

 

2、现有某项业务须要用到A.user_id和B.user_name,经过user_no来作关联查询,以下:

select A.user_id,B.user_name from A,B where A.user_no=B.user_no;

select A.user_id,B.user_name from A,B where A.user_no=B.user_no and A.user_no='1234567';

 

3、问题:

1.当A.user_no和B.user_no所有为数字类型时,以上脚本是没有问题的;

2.当B.user_no的某一个或多个值包含非数字字符时,该脚本会报:ORA-01722: 无效数字

 

4、缘由:

深层次缘由待后续分析。

 

5、反思:

1.最根本的,应该避免不一样表同一字段的数据类型不一致;

2.关联查询时增长数据类型转换,如:select A.user_id,B.user_name from A,B where to_char(A.user_no)=B.user_no;

3.若是项目中已经存在这种状况,应该确保varchar2类型的字段不会包含非数字字符。

相关文章
相关标签/搜索