一、存在表A和表B,都包含字段user_no,但數據類型不一致,如下:
create table A (
user_id varchar2(20),
user_no number(12,0),
xxx
);
create table B (
user_name varchar2(60),
user_no varchar2(20),
xxx
);
二、現有某項業務需要用到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';
三、問題:
1.當A.user_no和B.user_no全部為數字類型時,以上腳本是沒有問題的;
2.當B.user_no的某一個或多個值包含非數字字符時,該腳本會報:ORA-01722: 無效數字
四、原因:
深層次原因待后續分析。
五、反思:
1.最根本的,應該避免不同表同一字段的數據類型不一致;
2.關聯查詢時增加數據類型轉換,如:select A.user_id,B.user_name from A,B where to_char(A.user_no)=B.user_no;
3.如果項目中已經存在這種情況,應該確保varchar2類型的字段不會包含非數字字符。