Oracle-10g

Oracle 數據庫中 select 語句隱式轉換規則的變化

  • February 6, 2015

由於斷電後出現硬體故障,我們不得不從轉儲文件(通過 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 轉換為數字,因為它可以更快地比較數字。

引用自:https://dba.stackexchange.com/questions/56993