0
emp_id number
fname string
pnumber string
表在某些情況下emp_id爲和pnumber是相同的。我試圖使用查詢表
select * from emp where emp_id = pnumber
它是拋出一個錯誤;無效號碼
我該如何解決?
emp_id number
fname string
pnumber string
表在某些情況下emp_id爲和pnumber是相同的。我試圖使用查詢表
select * from emp where emp_id = pnumber
它是拋出一個錯誤;無效號碼
我該如何解決?
發生這種情況的原因不是列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產品之間發生變化。顯式轉換的行爲更具可預測性。