【问题标题】:Oracle number format model maximum lengthoracle数字格式模型最大长度
【发布时间】:2013-08-20 19:55:46
【问题描述】:

我在 Xto_numberto_char 中使用的 X number format element 遇到了一个特殊限制,当时我是 converting hexadecimal numbers to decimal numbers

看起来数字格式模型的最大长度为 63 个字符,但我找不到 the docs 中提到的限制。例如。提到了日期时间格式模型的最大长度:

日期时间格式模型的总长度不能超过 22 个字符。

有 63 个Xes:

SQL> select to_number('A', rpad('X', 63, 'X')) from dual;

TO_NUMBER('A',RPAD('X',63,'X'))
-------------------------------
                             10

有 64 个Xes:

SQL> select to_number('A', rpad('X', 64, 'X')) from dual;
select to_number('A', rpad('X', 64, 'X')) from dual
                      *
ERROR at line 1:
ORA-01481: invalid number format model

我只尝试了X 格式元素,因为它与我当前的任务相关。

问题:

  1. 这是文档中缺少的已知数字格式模型限制吗?
  2. 如何将 64(及更长)位长度的十六进制数转换为十进制数?

【问题讨论】:

  • 这种转换的目的是什么?用数值做一些算术运算还是只存储和显示?
  • @ThinkJet 这是从 90 年代中期开始运行的第 3 方传统硬件设备的数据加载。新版本引入了这些更大的十六进制字段。转换已经完成,因为它总是完成 - 这里没有人知道为什么。在清理了一些尘土飞扬的角落后,我们意识到终端系统不再使用这个特定的性能指标,所以我们可以放弃它(真是一种解脱)。看起来指标的用途在某些时候发生了变化,它包含几个必须单独解码的段,但没有人告诉我们。哦,维护程序员的乐趣!
  • 好的。我对您的维护问题表示同情。如果稍后您再次遇到此指标,请查看 rawtohexhextoraw 函数以进行转换,并查看 UTL_RAW 包以提取特定读数并执行位级操作。

标签: sql oracle oracle11g


【解决方案1】:

它超出了精度 NUMBER 可以达到的范围。官方文档中的更多信息:http://docs.oracle.com/cd/E16655_01/server.121/e17209/sql_elements001.htm#SQLRF00222

【讨论】:

  • 我不这么认为。根据bc,十进制中最大的 64 位十六进制数约为。 1.2 x 10^77 应该非常适合 Oracle number 的范围(最大值:1.0 x 10^126 - 1)。
  • @user272735 绝对值是另一回事。 number 数据类型的最大有效位数为 precisionlimited to 39 or 40 decimal digits
  • @ThinkJet 啊,当然!只有在您发表评论后,我才意识到我在阅读文档时错过了什么。 igr 请编辑您的帖子,以便我投票。
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2020-01-05
  • 2016-05-03
  • 2018-07-12
相关资源
最近更新 更多