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

发布于 2024-10-19 12:05:22 字数 519 浏览 4 评论 0原文

我有一个表应用程序,其中有一列

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函数的第一个参数应该是字符串类型

I have a table Application which has a column

BORROWINGTERM   NUMBER(10,0) Nullable

why this script throw an error (ORA-01722 invalid number)

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

while this one works

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

and this one also works

select nvl(1234,5678) from dual; 

base on this article

the first parameter of NVL function should be string type

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

心头的小情儿 2024-10-26 12:05:22

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

You're getting the error because you are mixing two different types in the nvl clause. One number, one string. The types must be the same.

薆情海 2024-10-26 12:05:22

简单来说,

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

示例:

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

//将数字转换为字符串,然后向列提供字符串替换值

select nvl(borrowingterm, 0') from Application; 

// 将 null 替换为 0

Keeping it simple ,

  • String null can be replaced with string Substitute value.
  • Number null can be replaced by number value and so on..

Example:

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

胡渣熟男 2024-10-26 12:05:22

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

请参阅 NVL 文档

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

In short, if the first argument is numeric then Oracle attempts to convert the second argument to a number.

See NVL documentation

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

天荒地未老 2024-10-26 12:05:22

在第一个示例中,由于 borrowingterm 是数字类型,Oracle 尝试将字符串“no term”隐式转换为数字,因此出现错误。

请参阅 NVL 文档

In your first example, because borrowingterm is a numeric type, Oracle is trying to implicitly convert the string 'no term' to a numeric, hence the error.

See the NVL documentation.

水中月 2024-10-26 12:05:22

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

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

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

在上面的情况下,nvl的输出是未知的,因此ORA -01722 被提出。

"the first parameter of NVL function
should be string type"

I think you gave the answer yourself. If you are asking why, you should consider the possibility of reusing the output type of NVL in another function.

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

In the situation above, the output of nvl is unknown, thus an ORA-01722 is raised.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文