Oracle "Invalid Number" 由 to_char 函数引起
Oracle "Invalid Number" caused by to_char function
我有以下 SQL 查询,它正在 table 中查找重复值(两个值为 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 时,这被测试并导致 "Invalid Number" Oracle 错误。我相信 to_char 是必要的,以防将来添加任何日期列。
为什么这样使用to_char会导致"Invalid Number"错误,正确的使用方法是什么?目前的列类型是varchar2、char和number。
此查询在 SQL 服务器上正常工作,但有一些更改 - 没有 to_char,isnull 而不是 nvl,并且 null 值更改为空字符串而不是“###”。这是一个较大查询的一部分,周围有 "and not exists"。
To_Char 默认接收一个数字作为参数。如果它接收到一个字符串,那么它会尝试将字符串隐式转换为数字,如果无法转换字符串,则会引发此错误消息。
如果列是字符类型,请不要尝试将其转换为字符串。
我有以下 SQL 查询,它正在 table 中查找重复值(两个值为 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 时,这被测试并导致 "Invalid Number" Oracle 错误。我相信 to_char 是必要的,以防将来添加任何日期列。
为什么这样使用to_char会导致"Invalid Number"错误,正确的使用方法是什么?目前的列类型是varchar2、char和number。
此查询在 SQL 服务器上正常工作,但有一些更改 - 没有 to_char,isnull 而不是 nvl,并且 null 值更改为空字符串而不是“###”。这是一个较大查询的一部分,周围有 "and not exists"。
To_Char 默认接收一个数字作为参数。如果它接收到一个字符串,那么它会尝试将字符串隐式转换为数字,如果无法转换字符串,则会引发此错误消息。
如果列是字符类型,请不要尝试将其转换为字符串。