关于oracle中number类型的长度和精度的一点整理.mark

本文探讨了Oracle数据库中NUMBER类型的长度和精度,解析了为什么所有NUMBER类型的长度显示为22,以及NUMBER(38)与NUMBER的区别。Oracle的NUMBER类型最大有效精度为40位,即使不指定精度,也可能存储很长的数字,但超过40位的精度则可能导致计算不准确。NUMBER(38)只是一个约束,实际最大精度依然为40位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:在做一次字段扩长的时候,需要和生产数据作对比.于是用以下SQL查询了一下该字段的长度.

SELECT

        COLUMN_NAME,DATA_LENGTH,DATA_PRECISION,DATA_SCALE

FROM

        USER_TAB_COLUMNS

WHERE

        TABLE_NAME='TEST_NUMBER'; --这里是测试表.

表字段分别为

A         ->        NUMBER(38)

B        ->         NUMBER

C        ->        NUMBER(18,2).

查询结果为:

COLUMN_NAME        DATA_LENGTH        DATA_PRECISION        DATA_SCALE

A                                        22                                38                                0

B                                        22                        

C                                        22                                18                                2

到这里,身为菜鸟的我产生了一丝疑惑.为啥所有的NUMBER类型长度都为22.不应该是NUMBER(18,2)长度就是18么?

后来带着疑惑,去查了下ORACLE官方,找到了答案.以下这两个是ORACLE官方技术团队给出答案

关于NUMBER类型的长度和精度的解释

NUMBER数据类型的部分答疑,挺有阅读价值

这里简单CTRL+C,CTRL+V出来.大概就是说,

一、NUMBER长度与精度

ORACLE的字节码长度为22.其中20个字节用来存储数据.而每个字节的字长既不是计算机常用的二进制计算的,也不是我们我熟悉的十进制计算的,更不是程序中常用的十六进制计算的,而是100进制计算.

WTF?头回见到100进制,除了震惊、震惊还是TM的震惊.

也就是说,ORACLE的最大数字(也就是最大有效精度)为99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99

总共20个99,也就是40个9. 所以ORACLE的最大有效精度为40位.

二、NUMBER(38)和NUMBER的区别.

文档中指出,NUMBER(38)的38只是一种格式、一个完整性约束.

也就是说你可以约束这个字段最大数字为NUMBER(38),再往上就报错了.

如果你不添加任何约束,而是使用NUMBER去定义这个字段.那么它的长度将是很长、很长、很长.

最长可达到125位.但它的最大有效精度只有40位.超过40位,倒也能存进去,只是无法精确到数字了.

比如41位的9  减去  (34位的9和1位的8) , 结果是0.已经无法进行正确计算了啊喂.

不过据我所知.NUMBER超过15位,也就是达到16位就已经不太好计算了,会有问题.

不过哪来的那么有钱的客户,做这么大金额的交易呢.

最后一点

NUMBER最大有效精度是40,不是38.     38只是可以声明的最大约束.

NUMBER最大有效精度是40,不是38.     38只是可以声明的最大约束.

NUMBER最大有效精度是40,不是38.     38只是可以声明的最大约束.

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值