PL SQL:NVL第一个参数类型转换问题

nan*_*din 4 sql oracle ora-01722

我有一个表有一个列的应用程序

BORROWINGTERM   NUMBER(10,0) Nullable
Run Code Online (Sandbox Code Playgroud)

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

select nvl(borrowingterm, 'no term') from Application 
Run Code Online (Sandbox Code Playgroud)

而这一个有效

select nvl(to_char(borrowingterm), 'no term') from Application 
Run Code Online (Sandbox Code Playgroud)

这一个也有效

select nvl(1234,5678) from dual; 
Run Code Online (Sandbox Code Playgroud)

基于这篇文章

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

Los*_*ama 8

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


Pav*_*adi 6

保持简单,

  • String null可以替换为字符串替换值.
  • Number null可以用数值替换,依此类推.

例:

select nvl(to_char(borrowingterm), 'no term') from Application; 
Run Code Online (Sandbox Code Playgroud)

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

select nvl(borrowingterm, 0') from Application; 
Run Code Online (Sandbox Code Playgroud)

// replacing null with 0


pab*_*blo 5

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

请参阅NVL文档

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


Joe*_*lli 5

在您的第一个示例中,因为borrowingterm是一个数字类型,Oracle试图将字符串'no term'隐式转换为数字,因此错误.

请参阅NVL文档.