各位先進好
在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的會出現
謝啦
chunjung提到:
ORA-01722: 無效的數字
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.為何筆數多時會有錯誤...(恕刪)
invalid number(無效的數字)
跟大小無關
跟軟硬無關
你用無法轉換的非數字 TO_NUMBER(RESULTVALUE)
用真實案例
否則是謎猜
如果你有多筆資料,可以寫個簡單迴圈把錯誤資料抓出來,會有這種問題,
很可能是出現了某一筆異常資料,如 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;
---最後再去看產生的結果,你應該就可以抓到是哪一筆資料造成異常.
我寫VS時,使用Oracle資料庫也遇到這個問題,
原因是字串的串連方式錯誤!
解決方式是要修正資料庫語法:
說明如下:
正常情況:
select * from table where col like '%字%'
其中的"字",因為是網頁的變數,所以改成
錯誤方式:
select * from table where col like '%' + '字' + '%'
正確方式:
select * from table where col like '%' || '字' || '%'
如果你也是在VS中遇到這個問題,找到+的位置,改成||即可!