【问题标题】:Double precision default 0 not null双精度默认 0 不为空
【发布时间】:2018-10-05 19:00:25
【问题描述】:

在创建表时,使用了以下 column_definition。有人可以解释第一列定义的含义吗?

Create Table abc_TEMP (column_1 DOUBLE PRECISION DEFAULT 0 Not Null,
....);

【问题讨论】:

  • 哪部分不明白?它实际上似乎不言自明。

标签: sql oracle precision create-table


【解决方案1】:

您正在创建一个名为 column_1DOUBLE PRECISION 数据类型列(它是一个二进制精度为 126 的浮点数)。

此列不明确接受空值,但如果您在 INSERT 语句中省略它,则会将数字 0 设置为它。

【讨论】:

  • 感谢 Diego 的解释。这当然有帮助。您能进一步解释“二进制精度 126”的概念吗?
  • DOUBLE PRECISION 是 FLOAT(p) Oracle 数据类型的 ANSI。对于 NUMBER 数据类型:精度 p = 位数。对于 FLOAT 数据类型:精度 p = 二进制精度(乘以 0.30103 进行转换)。所以 FLOAT = FLOAT (126) = 126 x 0.30103 = 大约 37.9 位精度。
【解决方案2】:

这意味着COLUMN_1 应该存储二进制精度为 126 位的浮点数值。因此,如果有人试图在此字段中输入字符串或日期,他们应该会收到错误消息。这就是DOUBLE PRECISION 的意思。

这也意味着如果有人在表中插入一行并且没有为COLUMN_1 指定值,Oracle 应该在该行上默认为零值。这就是DEFAULT 0 的意思。

这也意味着如果有人明确尝试将COLUMN_1 的值设置为 NULL,那么他们不应该被允许并且他们应该得到一个错误。这就是NOT NULL 的意思。

【讨论】:

  • 感谢马修的解释。这当然有帮助。您能进一步解释“二进制精度 126”的概念吗?
  • 是的,就是不能存储一个不能用126位内部表示的数字。例如,您不能将 pi 的值存储到十亿位。
猜你喜欢
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2014-12-07
  • 2011-12-26
  • 2023-03-04
相关资源
最近更新 更多