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

Ana*_*and 38 oracle11g

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

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

MCS*_*CSI 22

我发现的最佳解释是:

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数据类型.

这是链接


Mat*_*ank 17

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

你应该使用数字代替.

无论如何,Oracle在幕后将整数存储为数字.

最常见的是当int存储为ID时,它们被定义为没有参数 - 所以理论上你可以查看元数据视图的比例和精度列,看看是否可以存储没有小数值 - 但是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
Run Code Online (Sandbox Code Playgroud)


per*_*ck2 12

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

定义NUMBER变量时,可以指定其精度(p)和比例(s),以使其充分但不必要地大.Precision是有效数字的位数.规模可以是正数或负数.正标度表示小数点右侧的位数; 负标度标识小数点左侧可以向上或向下舍入的位数.

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

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

  • 在查询字典视图时,这与区分NUMBER和INTEGER有什么关系吗? (2认同)