由 to_char 函数引起的 Oracle “Invalid Number”

Posted

技术标签:

【中文标题】由 to_char 函数引起的 Oracle “Invalid Number”【英文标题】:Oracle "Invalid Number" caused by to_char function 【发布时间】:2015-09-30 03:39:23 【问题描述】:

我有以下 SQL 查询,它正在查找表中的重复值(两个为 null 的值必须被归类为重复,因此使用 nvl):

select * from PersonLinkTable personLink
where personLink.RefPerson = 100
and nvl(to_char(personLink.PersonLinkType), '###') = nvl(to_char(PersonLinkTable.PersonLinkType), '###')  // Repeats for required columns

第三行重复所需的列,并在将来添加任何新列时自动生成。问题是,当我添加 to_char 时,这是经过测试并导致“无效数字”Oracle 错误。我相信 to_char 是必要的,以防将来添加任何日期列。

为什么以这种方式使用 to_char 会导致“无效号码”错误,正确的使用方法是什么?目前的列类型是 varchar2、char 和 number。

此查询在 SQL Server 上正常工作,但有一些更改 - 没有 to_char、isnull 而不是 nvl,并且 null 值更改为空字符串而不是 '###'。这是一个更大查询的一部分,周围有“并且不存在”。

【问题讨论】:

【参考方案1】:

To_Char 期望默认接收一个数字作为其参数。如果它接收到一个字符串,那么它将尝试将字符串隐式转换为数字,如果字符串无法转换,则会引发此错误消息。

如果列是字符类型,不要尝试将其转换为字符串。

【讨论】:

感谢大卫,您的回答使我找到了我需要的修复程序。事实证明,“无效号码”错误不是由 to_char 引起的,而是由数字字段上的 nvl 引起的,该字段周围没有 to_char。所以事后看来,我的问题应该是“什么导致无效号码错误,我可以使用 to_char 来修复它吗?”。

以上是关于由 to_char 函数引起的 Oracle “Invalid Number”的主要内容,如果未能解决你的问题,请参考以下文章

oracle错误:函数没有足够的参数

oracle里nvl,to_char,decode这些函数怎么用啊?

oracle中to_char 的用法求解

oracle to_char 语法

这可能由 CredSSP 加密 oracle 修正引起的。

Oracle的to_char()函数使用