6

我有一个表应用程序,它有一列

BORROWINGTERM   NUMBER(10,0) Nullable

为什么这个脚本会抛出错误(ORA-01722 无效数字)

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

虽然这个有效

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

这个也有效

select nvl(1234,5678) from dual; 

根据这篇文章

NVL函数的第一个参数应该是字符串类型

4

5 回答 5

9

您收到错误是因为您在 nvl 子句中混合了两种不同的类型。一个数字,一个字符串。类型必须相同。

于 2011-03-01T14:42:03.930 回答
6

保持简单,

  • 字符串 null 可以替换为字符串替换值。
  • 数字 null 可以替换为数字值等等..

例子:

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

于 2016-04-07T14:56:28.360 回答
5

简而言之,如果第一个参数是数字,那么 Oracle 会尝试将第二个参数转换为数字。

请参阅 NVL 文档

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions105.htm#i91798

于 2011-03-01T14:44:22.837 回答
5

在您的第一个示例中,由于borrowingterm是数字类型,Oracle 试图将字符串“无术语”隐式转换为数字,因此出现错误。

请参阅NVL 文档

于 2011-03-01T14:46:59.293 回答
2

“NVL函数的第一个参数应该是字符串类型”

我想你自己给出了答案。如果你问为什么,你应该考虑在另一个函数中重用 NVL 的输出类型的可能性。

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

在上述情况下,nvl 的输出是未知的,因此引发了 ORA-01722。

于 2011-03-01T14:47:46.867 回答