最近,在处理db2时 - > oracle迁移项目,我们遇到了这种情况。 开发人员无意中使用decimal(s,p)列创建新的表结构。我不记得甲骨文支持这个,但后来一些挖掘表明它是一个ANSI数据类型因此由oracle支持。
然而,问题仍然存在 -
答案 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)
实际上,十进制和数字之间存在差异。 十进制将截断超标的值,数字将围绕该值。