Oracle Number to_char返回非常大的数字的哈希符号



我有一个。NET Windows服务,它将SQL Server数据库与Oracle(11g)数据库同步(这是手动完成的,因为第三方Oracle数据库中没有主键,我们不能使用SQL Server复制)。

我使用每一行的MD5散列来检查发布者和订阅者之间的差异,并试图确保MD5函数的输入对于SQL Server和Oracle数据库都具有相同的格式,以便进行比较。因此,在NUMBER列(它是SQL Server表中相应列中的"FLOAT")的情况下,我将值格式化如下:

Oracle

select to_char(13.9, '000000000.00000000000000000000') 
from dual;

SQL Server

select FORMAT(13.9, '000000000.00000000000000000000')

这在大多数情况下都很好,除了在Oracleto_char函数的情况下,当NUMBER列的值达到10位数时,例如1000000000(而不是999999999),to_char输出一个散列符号串:

###############################

这意味着,对于某些值,我的MD5函数的输入在Oracle和SQL Server之间有所不同。

我能用to_char做些什么来纠正这个问题吗?

您的格式掩码指定九个前导数字。因此,虽然您可能不会期望###的字符串,但当您向函数传递一个包含十个前导数字的数字时,您应该期望出现异常行为:)

最简单的解决方案:使您的格式掩码更大。你允许数字小数点后二十位,这是惊人的精确。为什么不对不可或缺的部分那么慷慨呢?

最新更新