Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL:无法将数字转换为字符_Oracle_Oracle11g_Number Formatting_To Char - Fatal编程技术网

Oracle SQL:无法将数字转换为字符

Oracle SQL:无法将数字转换为字符,oracle,oracle11g,number-formatting,to-char,Oracle,Oracle11g,Number Formatting,To Char,我有一个表SOME_table,其中有一个字段SOME_NUMBER,类型为NUMBER。如果我试图将此字段转换为char,在某些情况下会出现错误 这个选择 select id, SOME_NUMBER, to_char(SOME_NUMBER,'fm999999990D999999999999','nls_numeric_characters=''.,''') tochar, dump(SOME_NUMBER) from SOME_TABLE

我有一个表
SOME_table
,其中有一个字段
SOME_NUMBER
,类型为NUMBER。如果我试图将此字段转换为char,在某些情况下会出现错误

这个选择

select  id, 
        SOME_NUMBER,
        to_char(SOME_NUMBER,'fm999999990D999999999999','nls_numeric_characters=''.,''') tochar,
        dump(SOME_NUMBER)
from SOME_TABLE 
where id in (
19876,
19886,
19857,
19792,
19810
);
将导致

+-------+---------------+-------------------------+----------------------------+
|  ID   |  SOME_NUMBER  |         TOCHAR          |     DUMP(SOME_NUMBER)      |
+-------+---------------+-------------------------+----------------------------+
| 19792 | 0,00000013147 | 0.00000013147           | Typ=2 Len=4: 189,14,15,71  |
| 19810 | 0,0000001387  | ####################### | Typ=2 Len=3: 189,15,244    |
| 19857 | 0,00000011896 | ####################### | Typ=2 Len=4: 189,13,246,61 |
| 19876 | 0,00000012962 | 0.00000012962           | Typ=2 Len=4: 189,13,97,21  |
| 19886 | 0,00000011896 | ####################### | Typ=2 Len=4: 189,13,246,61 |
+-------+---------------+-------------------------+----------------------------+
此外,我注意到错误示例的内部表示与我通过“直接”选择得到的表示不同:

返回

+--------------+-------------------------+
| 0.0000001387 |          DUMP           |
+--------------+-------------------------+
| 0,0000001387 | Typ=2 Len=3: 189,14,88  |
| 0,0000001387 | Typ=2 Len=3: 189,15,244 |
+--------------+-------------------------+
对于给我错误的记录,这是正确的,所以这一定与问题有关


这是Oracle管理数字字段的错误吗?或者这是一种可接受/正确/可能的情况?我怎样才能解决这个问题?如果我尝试
到\u char
没有任何格式字符串的字段,则连接会下降。。。这不可能是正常的。这是已知问题吗?

很遗憾,您的数据已损坏。如果您不知道它是如何或为什么损坏的,您就不能真正信任它-您不知道原始数字是0.0000001387还是完全不同的数字。你知道这些数据是如何加载的吗?您可以通过OCI调用获得损坏,并且
imp
有时用于导致此类事件,让Oracle支持参与进来的建议可能也适用于此。可能重复。明天早上我将检查数据的加载方式,这是一个复杂的过程。但这种差异是否意味着我的数据确实被破坏了?我可以这么说,是的。如果您能够准确地找出它被破坏的位置和方式(即加载过程中的特定错误),那么您可以找出原始值并进行更正,但这似乎是一个很长的过程。请记住,即使是转换的值实际上也可能不正确——它们可能只是损坏了一个内部值,即一个实数;或者你可以有一些坏的和一些好的。真的没有办法告诉你。很抱歉祝你好运…确保endian格式相同。请参阅。
+--------------+-------------------------+
| 0.0000001387 |          DUMP           |
+--------------+-------------------------+
| 0,0000001387 | Typ=2 Len=3: 189,14,88  |
| 0,0000001387 | Typ=2 Len=3: 189,15,244 |
+--------------+-------------------------+