十进制(s,p)或数字(s,p)?

时间:2012-06-14 10:42:24

标签: oracle db2 ansi type-conversion

最近,在处理db2时 - > oracle迁移项目,我们遇到了这种情况。 开发人员无意中使用decimal(s,p)列创建新的表结构。我不记得甲骨文支持这个,但后来一些挖掘表明它是一个ANSI数据类型因此由oracle支持。

然而,问题仍然存在 -

  1. 这些数据是如何在内部处理的?
  2. 是否需要使用ANSI类型而不是Oracle的内置类型?
  3. 如果目标类型是Oracle内置类型,是否会在数据迁移期间产生影响?

2 个答案:

答案 0 :(得分:18)

在Oracle中,they are the same

  

创建表和集群的SQL语句也可以使用ANSI数据   IBM产品SQL / DS和DB2中的类型和数据类型。神谕   识别与Oracle不同的ANSI或IBM数据类型名称   数据库数据类型名称。它将数据类型转换为等效类型   Oracle数据类型,记录Oracle数据类型作为名称   列数据类型,并将列数据存储在Oracle数据类型中   基于下表中显示的转换。

此报价下方的表格显示DECIMAL(p,s)在内部被视为NUMBER(p,s)

SQL> create table t (a decimal(*,5), b number (*, 5));

Table created

SQL> desc t;
Name Type        Nullable Default Comments 
---- ----------- -------- ------- -------- 
A    NUMBER(*,5) Y                         
B    NUMBER(*,5) Y  

但是,DECIMAL的比例默认为0,这意味着DECIMAL(*)被视为NUMBER(*, 0),即INTEGER

SQL> create table t (a decimal, b number, c decimal (5), d decimal (5));

Table created

SQL> desc t;
Name Type      Nullable Default Comments 
---- --------- -------- ------- -------- 
A    INTEGER   Y                         
B    NUMBER    Y                         
C    NUMBER(5) Y                         
D    NUMBER(5) Y   

答案 1 :(得分:-2)

实际上,十进制和数字之间存在差异。 十进制将截断超标的值,数字将围绕该值。