2011-03-01 46 views
4

我有有一欄PL SQL:NVL第一個參數的類型轉換問題

BORROWINGTERM NUMBER(10,0) Nullable 

爲什麼這個腳本拋出錯誤(ORA-01722無效號碼)

select nvl(borrowingterm, 'no term') from Application 

,而這樣的表應用一期工程

select nvl(to_char(borrowingterm), 'no term') from Application 

,這一次也適用

012在 this article

NVL函數的第一個參數

select nvl(1234,5678) from dual; 

的基礎應該是字符串類型

+0

那篇文章,而確定,是不完全準確。 NVL針對多種數據類型而被重載。 – 2011-03-02 03:54:34

回答

9

你得到的錯誤,因爲你的NVL子句中混合兩種不同的類型。一個數字,一個字符串。類型必須相同。

5

在你的第一個例子,因爲borrowingterm是數值型,甲骨文正在試圖隱式轉換字符串「無期限」的數字,因此錯誤。

查看NVL documentation

2

「NVL功能 的第一個參數是字符串類型」

我想你給自己的答案。如果你問爲什麼,你應該考慮在另一個函數中重用NVL輸出類型的可能性。

select to_date(nvl(number_field, 'some_text')) from dual 

在上面的情況下,nvl的輸出是未知的,因此引發了ORA-01722。

4

保持簡單,

  • 空字符串可以用字符串替換值來代替。
  • 號空可以通過數值來替換等等..

實施例:

select nvl(to_char(borrowingterm), 'no term') from Application; 

//conert number to string and then provide string substitute value to column

select nvl(borrowingterm, 0') from Application; 

// replacing null with 0