oracle词典视图中数字和整数数据类型之间的差异

时间:2012-11-21 13:09:54

标签: oracle11g

我使用oracle字典视图来查找两个模式之间的列差异。在同步数据类型差异时,我发现NUMBER和INTEGER数据类型仅存储在all_tab_columns / user_tab_columns / dba_tab_columns中作为NUMBER,因此很难同步数据类型差异,其中一个架构/列具有数字数据类型而另一个架构/列具有整数数据类型

虽然架构的比较显示数据类型不匹配。请使用字典视图建议是否存在任何其他替代格式,或者是否可以使用字典视图中的任何特定属性来识别数据类型是否为整数。

3 个答案:

答案 0 :(得分:20)

我发现的最佳解释是:

INTEGER和NUMBER有什么区别?我们何时应该使用NUMBER,何时应该使用INTEGER?我只是想在这里更新我的评论......

我们输入的NUMBER始终存储。比例为-84到127.但INTEGER舍入到整数。 INTEGER的比例为0. INTEGER相当于NUMBER(38,0)。这意味着,INTEGER是受约束的数字。小数位将四舍五入。但NUMBER并不受限制。

  • INTEGER(12,2)=> 12
  • INTEGER(12.5)=> 13
  • INTEGER(12.9)=> 13
  • INTEGER(12.4)=> 12
  • NUMBER(12,2)=> 12.2
  • NUMBER(12.5)=> 12.5
  • NUMBER(12.9)=> 12.9
  • NUMBER(12.4)=> 12.4

INTEGER总是慢于NUMBER。由于整数是具有附加约束的数字。它需要额外的CPU周期来强制执行约束。我从来没有看到任何差异,但是当我们在INTEGER列上加载数百万条记录时可能会有所不同。如果我们需要确保输入是整数,那么INTEGER是最佳选择。否则,我们可以坚持使用NUMBER数据类型。

以下是link

答案 1 :(得分:15)

整数仅适用于sql标准,即Oracle不推荐使用。

您应该使用Number。

Oracle总是在幕后将整数存储为数字。

最常见的是,当为int存储整数时,它们的定义没有参数 - 所以理论上你可以查看元数据视图的比例和精度列,看看是否可以存储没有小数值 - 但99%的这个时间没有用。

如上所述,您可以查找数字(38,0)列或类似(即不允许小数点的列),但这只会告诉您哪些列不能取小数,而不是定义哪些列以便INTS可以存储。

建议: 在数字列上执行数据配置文件。像这样:

 select max( case when trunc(column_name,0)=column_name then 0 else 1 end ) as has_dec_vals
 from table_name

答案 2 :(得分:11)

这是我从oracle documentation获得的,但是它适用于oracle 10g第2版:

定义NUMBER变量时,可以指定其精度(p)和比例(s),使其足够大,但不一定非常大。 Precision是有效数字的位数。规模可以是正数或负数。正标度表示小数点右侧的位数;负刻度表示小数点左边的位数,可以向上或向下舍入。

Oracle数据库标准库支持 NUMBER 数据类型,其运行方式与SQL相同。当文本或 INTEGER 数据类型不合适时,它用于维度和代理项。它通常分配给不用于计算的变量(如预测和聚合),并且用于必须与数据库的舍入行为匹配或需要高精度的变量。在决定是否将NUMBER数据类型分配给变量时,请记住以下事实,以便最大限度地提高效果

  • NUMBER变量的分析工作空间计算比其他数值数据类型慢,因为NUMBER值是用软件计算的(精度)而不是硬件(速度)。
  • 当数据从分析工作区提取到具有NUMBER数据类型的关系列时,如果数据在分析工作区中已具有NUMBER数据类型,则性能最佳,因为不需要转换步骤。