2014-07-15 41 views
0

我有3列Oracle查詢字符串,數字轉換問題

emp_id number 
fname string 
pnumber string 

表在某些情況下emp_id爲和pnumber是相同的。我試圖使用查詢表

select * from emp where emp_id = pnumber 

它是拋出一個錯誤;無效號碼

我該如何解決?

回答

4

發生這種情況的原因不是列pnumber中的所有數據都是NUMBER。爲了執行比較,Oracle將該列隱式轉換爲數字。

您需要明確使用TO_CHAR()轉換emp_id列的字符串:

select * from emp where to_char(emp_id) = pnumber 

更一般地,never rely on implicit conversion;始終明確地做所有事情,以便數據庫知道你想要做什麼。引述:

Oracle建議您指定顯式轉換,而不是依賴於隱式或自動轉換,原因如下:

  • SQL語句是容易當你使用顯式數據類型轉換了解功能。

  • 隱式數據類型轉換可能會對性能產生負面影響,尤其是如果將列值的數據類型轉換爲常數而非其他方式。

  • 隱式轉換取決於它發生的上下文,並且在每種情況下可能不會以相同的方式工作。例如,從日期時間值到VARCHAR2值的隱式轉換可能會返回意外的一年,具體取決於NLS_DATE_FORMAT 參數的值。

  • 隱式轉換的算法可能會在軟件版本和Oracle產品之間發生變化。顯式轉換的行爲更具可預測性。