最近,在进行db2-> oracle迁移项目时,我们遇到了这种情况。
开发人员无意间使用十进制(s,p)列创建了新的表结构。我不记得Oracle支持此功能,但是随后的一些挖掘表明它是ANSI数据类型,因此受oracle支持。
但是,对我来说,问题仍然存在-
内部如何处理这些数据?
使用ANSI类型而不是Oracle的内置类型是否有成本?
如果目标类型是Oracle内置类型,那么在数据迁移期间会产生影响吗?
最佳答案
在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
关于oracle - 十进制(s,p)或数字(s,p)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031409/