iT邦幫忙

0

ORACLE TO_NUMBER資料筆數多時會有【ORA-01722: 無效的數字】錯誤

各位先進好
在ORACLE
比如我要查詢 TO_NUMBER(RESULTVALUE)<'7' 的資料,RESULTVALUE資料形態為VARCHAR2
查詢條件,如每月分開查,結果如筆數較少皆能正常得到結果
查詢條件,如一次查半年以上開查,結果如筆數較多時就會有以下錯誤
ORA-01722: 無效的數字
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.

為何筆數多時會有錯誤呢
如直接RESULTVALUE<'7'不會有錯誤,但有些>=7的會出現
謝啦

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
Albert
iT邦高手 1 級 ‧ 2015-01-31 18:01:01

chunjung提到:
ORA-01722: 無效的數字
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.

為何筆數多時會有錯誤...(恕刪)

invalid number(無效的數字)
跟大小無關
跟軟硬無關
你用無法轉換的非數字 TO_NUMBER(RESULTVALUE)
用真實案例
否則是謎猜

chunjung iT邦新手 5 級 ‧ 2015-02-01 09:54:30 檢舉

比如我要查103年<7的項目數就會有錯誤
但分開查10301、10302....10312分12個月查都查的到結果,代表此欄位值資料符合
就查詢期間拉大就invalid number(無效的數字)
謝啦

slime iT邦大師 1 級 ‧ 2015-02-01 10:33:49 檢舉

一個想法試試看:

  1. 把年跟月拆開.
  2. 把年轉一次; 把月另外轉一次.
  3. 再把轉換過的年跟月拿來比較.
0
wilson1966
iT邦研究生 2 級 ‧ 2015-02-02 11:34:04

這不可能的,我猜應是NULL 的關係,或者小數點位數太多了

0
shengfu
iT邦新手 2 級 ‧ 2015-02-05 08:33:45

如果你有多筆資料,可以寫個簡單迴圈把錯誤資料抓出來,會有這種問題,
很可能是出現了某一筆異常資料,如 A123 or null之類的

你可以試試看這樣

Declare

begin
For R1 in (select t.rowid,T.*
from table T
where TO_NUMBER(RESULTVALUE)<'7'
order by t.rowid )
loop
Dbms_output.put_line ('Sucess='||r1.RESULTVALUE ||' '||r1.rowid);
end loop;
exception
when others then
Dbms_output.put_line ('Fail'='||r1.RESULTVALUE||' Eorrcode='||sqlerrm);
end;

---最後再去看產生的結果,你應該就可以抓到是哪一筆資料造成異常.

0
starcity1003
iT邦新手 4 級 ‧ 2015-12-14 10:53:48

我寫VS時,使用Oracle資料庫也遇到這個問題,

原因是字串的串連方式錯誤!

解決方式是要修正資料庫語法:

說明如下:

正常情況:
select * from table where col like '%字%'
其中的"字",因為是網頁的變數,所以改成
錯誤方式:
select * from table where col like '%' + '字' + '%'
正確方式:
select * from table where col like '%' || '字' || '%'

如果你也是在VS中遇到這個問題,找到+的位置,改成||即可!

我要發表回答

立即登入回答