Oracle關聯查詢-數據類型不一致問題 ORA-01722: 無效數字


一、存在表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類型的字段不會包含非數字字符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM