【发布时间】:2013-06-29 05:53:48
【问题描述】:
Oracle 10g 中的 FLOAT 数据类型是什么,它与 NUMBER 有何关系?
我可以在 Oracle 文档中找到 FLOAT 的唯一参考是在此页面的 BINARY_DOUBLE 部分:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i140621 它似乎表明它存储一个浮点数并允许您指定精度位,但它没有'不引用 NUMBER 类型。 11g 文档根本没有提到 FLOAT。
《专家级 Oracle 数据库架构:Oracle 数据库 9i、10g 和 11g 编程技术和解决方案,第二版》一书说:
除了 NUMBER、BINARY_FLOAT 和 BINARY_DOUBLE 类型之外,Oracle 在语法上还支持以下数字数据类型:
当我说“语法支持”时,我的意思是 CREATE 语句可能会使用这些数据类型,但实际上它们都是 NUMBER 类型。 ...
- FLOAT(p):映射到 NUMBER 类型。
我不明白的是如何它映射到NUMBER。
NUMBER(p) 允许我指定精度,但刻度默认为 0。似乎 FLOAT(p) 映射到 NUMBER(decimal p, *),即固定精度但可变刻度,这不是 NUMBER 类型所允许的据我所知。
那么,FLOAT 不仅仅是一个别名,还提供了 NUMBER 本身不提供的行为?
【问题讨论】:
-
我没有方便检查的 Oracle 实例,但如果我没记错的话,FLOAT 在 SYS.STANDARD 包中定义为 NUMBER 的子类型。 (在 Oracle 中,大多数 数字类型是 NUMBER 的子类型。我相信 BINARY_FLOAT 和 BINARY_DOUBLE 是极少数例外之一。PLS_INTEGER 可能是另一种,但我不确定 - 检查 SYS.STANDARD )。
-
@BobJarvis 是的,上面写着
subtype FLOAT is NUMBER; -- NUMBER(126),但又一次写着subtype BINARY_FLOAT is NUMBER;...