gpt4 book ai didi

sql - FLOAT 如何映射/关联到 Oracle 10g 中的 NUMBER?

转载 作者:行者123 更新时间:2023-12-04 18:09:42 24 4
gpt4 key购买 nike

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 编程技术和解决方案,第二版”一书说:

In addition to the NUMBER, BINARY_FLOAT, and BINARY_DOUBLE types, Oracle syntactically supports the following numeric datatypes:

When I say "syntactically supports," I mean that a CREATE statement may use these datatypes, but under the covers they are all really the NUMBER type. ...

  • FLOAT(p): Maps to the NUMBER type.


我不明白的是它如何映射到 NUMBER。
NUMBER(p)允许我指定精度,但比例默认为 0。似乎是 FLOAT(p)正在映射到 NUMBER(decimal p, *) ,即固定精度但可变比例,据我所知,这不是 NUMBER 类型所允许的。

那么,FLOAT 不仅仅是一个别名,而且还提供了 NUMBER 本身不提供的行为?

最佳答案

10g 中的文档有点不清楚。从 11.1 开始,它有了很大的改进:

http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm#sthref94

总之,FLOATNUMBER 相同,有两点不同

  • FLOAT无法指定比例
  • FLOAT ,精度以二进制位给出,在 NUMBER十进制数字,所以 FLOAT(126)表示 126 位精度,NUMBER(38)表示精度的 38 位十进制数字

  • 编辑
    一些例子表明 FLOAT只是一个 NUMBER变相。
    CREATE TABLE t (
    n1 NUMBER(*,1), f1 FLOAT(1), f2 FLOAT(2), f3 FLOAT(3),
    n2 NUMBER(*,2), f4 FLOAT(4), f5 FLOAT(5), f6 FLOAT(6)
    );
    INSERT INTO t VALUES (1/3, 1/3, 1/3, 1/3, 1/3, 1/3, 1/3, 1/3);

    SELECT n1, f1, f2, f3 FROM t;
    0.3 0.3 0.3 0.3

    SELECT DUMP(n1), DUMP(f1), DUMP(f2), DUMP(f3) FROM t;
    Typ=2 Len=2: 192,31
    Typ=2 Len=2: 192,31
    Typ=2 Len=2: 192,31
    Typ=2 Len=2: 192,31

    SELECT n2, f4, f5, f6 FROM t;
    0.33 0.33 0.33 0.33

    SELECT DUMP(n2), DUMP(f4), DUMP(f5), DUMP(f6) FROM t;
    Typ=2 Len=2: 192,34
    Typ=2 Len=2: 192,34
    Typ=2 Len=2: 192,34
    Typ=2 Len=2: 192,34

    但是请注意,从 Float 的精度位到 Number 的十进制数字的转换系数不是 3,而是大约 3.32。确切地说,digits = ceil(bits/log(2,10)。

    关于sql - FLOAT 如何映射/关联到 Oracle 10g 中的 NUMBER?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17415847/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com