2015-07-11 60 views
0

我有在一個表中尋找重複值以下SQL查詢(兩個值被空必須被歸類爲重複,因此,使用NVL的):甲骨文「無效號碼」引起TO_CHAR函數

select * from PersonLinkTable personLink 
where personLink.RefPerson = 100 
and nvl(to_char(personLink.PersonLinkType), '###') = nvl(to_char(PersonLinkTable.PersonLinkType), '###') // Repeats for required columns 

第三行重複所需的列,並在將來添加新列時自動生成。問題是,當我添加to_char時,這被測試並導致「無效數字」Oracle錯誤。我相信在日後添加任何日期列時,需要使用to_char。

爲什麼以這種方式使用to_char會導致「無效數字」錯誤,以及使用它的正確方法是什麼?此刻的列類型是varchar2,char和number。

此查詢在SQL Server上正常工作,但發生了一些更改 - no to_char,isnull而不是nvl,空值更改爲空字符串而不是'###'。這是一個較大的查詢的一部分,並且在它周圍有「並且不存在」。

回答

1

To_Char預計默認接收一個數字作爲它的參數。如果它接收到一個字符串,那麼它會試圖暗中將字符串轉換爲一個數字,如果字符串不能被轉換,會引發這個錯誤信息。

如果該列是字符類型,請不要嘗試將其轉換爲字符串。

+0

謝謝大衛,你的回答讓我知道我需要的修復。事實證明,「無效數字」錯誤不是由to_char引起的,而是由數字字段上的nvl引起的,該字段周圍沒有to_char。所以事後看來,我的問題應該是像「什麼導致無效數字錯誤,我可以使用to_char來修復它?」。 –