ERROR-01722 錯誤的作業方式似乎存在不一致,對于那些不知道問題是由于數字無效的人,要修復它,您需要將數字包裝為 char。
但是在過濾 VARCHAR2 時,Oracle 將根據給定的值轉換正在過濾的列的資料。(見:https ://stackoverflow.com/a/10422418/5337433 )
既然由于某種原因已對此進行了解釋,則該錯誤是不一致的。作為一個例子,我有這個查詢:
在這個例子中 filter1 是 varchar2
select *
from table
where filter1 = 12345
and filter2 = ''
and filter3 = '';
當這個陳述句運行時沒有問題,但是當你像這樣運行它時:
select *
from table
where filter1 = 12345
and filter2 = '';
它出錯為 ERROR-01722,我不確定它為什么會這樣,以及如何修復它。
uj5u.com熱心網友回復:
當您將varchar列與數字進行比較時,Oracle 將嘗試將列的內容轉換為數字,而不是相反(因為123可以存盤為'0123'or '00123')
通常,您應該始終使用與您比較的列的資料型別相匹配的常量值。所以應該是:
where filter1 = '12345'
但是,如果您在該列中存盤數字,則不應將其定義為varchar- 它應轉換為適當的number列。
錯誤沒有“始終如一地”顯示的原因是您似乎有一些可以轉換為數字的值,而有些則不能。是否包含這些值取決于查詢中的其他條件。
另外:空字串在 Oracle 中被轉換為 NULL。所以條件filter2 = ''永遠不會成立。filter2 is null如果要檢查“空”列,則必須使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448755.html
上一篇:如何根據報價集計算總和
