【问题标题】:Oracle integer stored with comma用逗号存储的 Oracle 整数
【发布时间】:2019-03-19 18:16:13
【问题描述】:

我查看了一个 oracle 数据库,有一个名为 score 的列,它被声明为 INT(12,2)

存储在那里的值如下所示:
23487.31
0
322.3

这是否意味着这些是实际的浮点值?
我真的浏览了 oracle 数据类型文档,但找不到任何有关 INT(a,b) 表示法的信息。
(来源:https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT012

编辑: SELECT * FROM v$version; 给我:

Oracle Database 10g Release 10.2.0.5.0 - Production
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

【问题讨论】:

  • Oracle 不允许您创建列定义为int(12,2) 的表。 int doesn't take arguments。你确定你看到的是INT而不是NUMBER;如果是这样,在哪里显示?
  • 重申@AlexPoole 所说的 - 在定义 INT 类型的列时,您不能提供比例或精度。这根本是不允许的,并且会引发ORA-00907: missing right parenthesis 错误。 dbfiddle here 如果您有一个数据库,其中列定义为 INT(12,2) 它不是 Oracle。您是指主线 Oracle 产品,还是他们的其他产品之一,例如 MySQL 或 Rdb? (MySQL 甚至不允许这样做。无法检查 Rdb,因为我不再有权访问 Rdb 服务器,但我怀疑它会起作用)。
  • @AlexPoole 我从DESCRIBE MYTABLE 得到了INT(12,2)。是的,它是 Oracle 10g。我更新了我的问题以获取更多详细信息。
  • 在 Oracle DESCRIBE MYTABLE 中应该显示 INTEGER 而不是 INT。除非 10.2.0.5 出现异常。
  • @Peter - 在哪个客户端,哪个版本的数据库和客户端?您对all_tab_columns 中的数据类型、精度和规模有何看法?

标签: oracle numbers integer sqldatatypes


【解决方案1】:

这是否意味着这些是实际的浮点值?

没有。这些是定义精度为小数点后两位的数字。

Oracle 支持 FLOAT 数据类型,但它在内部表示为 NUMBER。如果您想要真正的浮点运算以实现更快的算术运算,它具有 BINARY_FLOAT 和 BINARY_DOUBLE。


为什么我找不到关于 INT(a,b) 符号的任何信息?

因为它不是有效的 Oracle 表示法。 INT 允许作为 INTEGER 的同义词,但不允许使用比例或精度参数。如果您尝试将它们包括在内,Oracle 会抛出 ORA-00907。 (无论如何,精度都是无效的,因为整数的精度可以为零。)

【讨论】:

  • 感谢您的回答,为什么我找不到关于INT(a,b) 的符号的任何信息?你对此有什么想法吗?或者你有什么来源吗?
猜你喜欢
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2013-07-22
  • 2014-12-18
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多