Oracle-10g
Oracle 數據庫中 select 語句隱式轉換規則的變化
由於斷電後出現硬體故障,我們不得不從轉儲文件(通過 exp 創建)為我們的第 3 方應用程序之一重新創建數據庫。舊硬體執行 Oracle 10G R2,而新硬體執行 Oracle 11G R2。一切順利,應用程序再次正常執行。
過去幾天,我們的使用者報告了該軟體的問題。經過一些研究後,應用程序執行一條 sql 語句,該語句嘗試使用數字過濾 varchar 列,從而強制對列進行隱式轉換。
在以前的 Oracle 版本中一切正常,但現在拋出“ORA-01722:無效號碼”。
可能有一些我們錯過了新數據庫的設置嗎?
我們已經聯繫了開發公司,但需要一些時間。
範例表和數據:
create table conversion ( col1 varchar2(10) ); insert into conversion values ('test2'); insert into conversion values ('42'); insert into conversion values ('test3');
拋出錯誤的簡化語句:
select count(*) from conversion where col1 = 42;
提前致謝並致以最誠摯的
問候
所以你有一個 VARCHAR 列和一個 NUMBER 過濾器。隱式轉換確實允許 NUMBER -> VARCHAR 轉換,但問題是在應用過濾器時,Oracle 會嘗試以另一種方式進行,即。將 VARCHAR 列轉換為數字,從而引發錯誤:)
除了更新 SQL 查詢之外,這裡沒有真正看到任何解決方案。這就是為什麼沒有人推薦使用隱式轉換的原因。它們還可能導致性能略有下降。
編輯:如果您無權訪問查詢並且必須等待開發團隊,但是您對數據庫有足夠的權限,並且確定 VARCHAR 列只包含數字,您可以嘗試更改表並轉換列類型。
當您將其留在數據庫中決定時,它會嘗試將 char 轉換為數字,因為它可以更快地比較數字。