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类型的字段不会包含非数字字符。