我有一个表有一个列的应用程序
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函数的第一个参数应该是字符串类型
答案 0 :(得分:8)
您收到错误是因为您在nvl子句中混合了两种不同的类型。一个数字,一个字符串。类型必须相同。
答案 1 :(得分:6)
保持简单,
示例:
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
答案 2 :(得分:5)
简而言之,如果第一个参数是数字,那么Oracle会尝试将第二个参数转换为数字。
请参阅NVL文档
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions105.htm#i91798
答案 3 :(得分:5)
在您的第一个示例中,因为borrowingterm
是一种数字类型,Oracle正在尝试将字符串'no term'隐式转换为数字,因此错误。
答案 4 :(得分:2)
“NVL功能的第一个参数 应该是字符串类型“
我认为你自己给出了答案。如果你问为什么,你应该考虑在另一个函数中重用NVL的输出类型的可能性。
select to_date(nvl(number_field, 'some_text')) from dual
在上面的情况中,nvl的输出是未知的,因此引发了ORA-01722。