Ora01722 無效數字 報錯帶來的反省
阿新 • • 發佈:2019-02-08
第一步:先建立兩個測試表
第一個表:
create table test_a
(
id_no number
,vchar varchar2(50)
);
第二個表:
create table test_b
(
id_no number
,vnum number
);
第二步:往表裡插入資料
第三步:寫出問題SQL:insert into TEST_A (ID_NO, VCHAR)values (1, '奧特曼'); insert into TEST_A (ID_NO, VCHAR)values (2, 'WPS'); insert into TEST_A (ID_NO, VCHAR)values (3, '10'); insert into test_b (ID_NO, VNUM)values (1, 10); insert into test_b (ID_NO, VNUM)values (2, 11); insert into test_b (ID_NO, VNUM)values (3, 12);
select * from test_a
where vchar in (select vnum from test_b)
錯誤原因以前這樣用沒有問題的原因是,以前碰到的欄位,雖然都是字元型,但是裡面存的確是都是一些數字,
因此在Oracle預設轉換為數字的的時候不會問題。但是這個欄位裡面,不僅有數字,還有中文和英文,都是實打實的
字串,無法在預設轉換的時候被轉換成數字,所以就會報錯無效數字。由於以前不好的習慣,導致了這個失誤。甚至
會覺得自己沒有錯誤,因為以前都是這樣寫的。
自我反省
不能因為Oracle越來越人性化,而忽視程式碼書寫的嚴謹性。嚴格要求自己。
正確的寫法:
select * from test_a
where vchar in (select to_char(vnum) from test_b)