2011-03-01 43 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