oracle数据类型=数字,指数如何与精度和规模相关?

时间:2011-08-26 03:53:31

标签: database oracle

我一直在努力了解Oracle数据库对数据类型=数字的使用。我跑过以下链接:

ask tom

我在解释它时遇到了麻烦。我应该提一下我没有Oracle背景,但是从Matlab经验中接近这个。我理解数字数据类型具有精度和规模。我不明白的是如何在这里处理指数。指数是否与精度和规模分开考虑?或者,指数是否受精度和规模的限制?

这是我的困惑 - 上面的链接以:

开头

问:我将表格列的数据类型声明为NUMBER&推定它    是数字(38)具体。但我觉得奇怪的是,它是    接受数字beyong 38 digits.ie。 1.111E + 125。如果是Datatype的精度    是38,比例范围可以从-84到127,该值可以插入到列中。

答:我们说......    1.111e + 125只有4位精度(表示所需的位数)    数字 - 在这种情况下是1111)。

这似乎表明指数与精度和比例分开处理。但是其他人发出的一些消息要求:

问:当我创建一个表格时:    创建表测试(没有数字(7));    插入测试值(1.00e + 25);    它给出以下错误消息:        ORA-01438:大于指定精度的值允许此列。    你可以。解释一下。

答:你说了7位数,你给了它25个

似乎表明指数受精度的限制。希望有人可以帮助我理解两个答案是如何正确的。

1 个答案:

答案 0 :(得分:3)

number(7)是一个(最多)七位数的整数(在“正常”十进制表示中)。请注意,不允许分数。不接受大于9,999,999的数字。这与他们有多少有效数字无关。这是您实施的“业务约束”。

number(7,2)将是一个七位数字,包括小数点后的两位

number是一个浮点数,精度为38位(即38位有效数字,无论它们与小数点的位置如何)。指数可以是-84到125之间的任何值。这里没有“业务约束”。您可以存储尽可能多的Oracle存储(38位数和-84到125之间的指数)。

请注意,所有这些数字都存储为十进制数据(以避免在转换为二进制时出现舍入错误),因此“数字”实际上是十进制数字(不是二进制位)。