19

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

然而,对我来说,问题仍然存在——

  1. 这些数据是如何在内部处理的?
  2. 使用 ANSI 类型而不是 Oracle 的内置类型有成本吗?
  3. 如果目标类型是Oracle内置类型,在数据迁移过程中会不会有影响?
4

2 回答 2

18

在 Oracle 中,它们是相同的

创建表和集群的 SQL 语句也可以使用来自 IBM 产品 SQL/DS 和 DB2 的 ANSI 数据类型和数据类型。Oracle 识别不同于 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  

但是,对于 ,比例默认为 0 DECIMAL,这意味着将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   
于 2012-06-14T11:00:54.130 回答
-2

实际上,十进制和数字之间是有区别的。十进制将截断超出比例的值,数字将舍入该值。

于 2012-12-19T03:31:09.587 回答