Oracle 十进制(s,p)还是数字(s,p)?

Oracle 十进制(s,p)还是数字(s,p)?,oracle,db2,ansi,type-conversion,Oracle,Db2,Ansi,Type Conversion,最近,在执行db2->oracle迁移项目时,我们遇到了这种情况。 开发人员无意中使用十进制(s,p)列创建了新的表结构。我不记得Oracle支持这一点,但后来一些挖掘表明,它是一种ANSI数据类型,因此受到Oracle的支持 然而,我的问题仍然是: 如何在内部处理这些数据 使用ANSI类型而不是Oracle的内置类型是否有成本 如果目标类型是Oracle内置类型,那么在数据迁移期间会有影响吗 在甲骨文中: 创建表和集群的SQL语句也可以使用ANSI数据 IBM产品SQL/DS和DB2中的类型和

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

然而,我的问题仍然是:

  • 如何在内部处理这些数据
  • 使用ANSI类型而不是Oracle的内置类型是否有成本
  • 如果目标类型是Oracle内置类型,那么在数据迁移期间会有影响吗 在甲骨文中:

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

    此引文下表显示,
    DECIMAL(p,s)
    在内部被视为一个
    数字(p,s)

    但是,
    十进制
    的刻度默认为0,这意味着
    十进制(*)
    被视为
    数字(*,0)
    ,即
    整数

    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   
    

    实际上,十进制和数字是有区别的。
    Decimal将截断超出刻度的值,number将舍入该值。

    没有数据转换:
    Decimal
    存储并视为
    数字
    @learn4living-Oracle没有转换数据(存储在列中的值),而是转换metatdata(存储在数据字典中的数据)。因此,唯一的代价就是你现在所付出的代价:Oracle从业者面临着非Oracle数据类型的困惑。好吧,在我们的项目中,默认为零的规模使差异和研究变得有价值。谢谢大家的指点。@VincentMalgrat:十进制和数字不完全一样。正如SYS.STANDARD中定义的那样,十进制被定义为数字(38,0),因此定义为十进制的变量不能包含小数点右侧的任何数字,而定义为数字的变量可以。要使小数点右边有数字,必须将其定义为十进制(38,4)。分享和享受。我很想看到这方面的演示。似乎表明数字和十进制四舍五入都超过了刻度值。
    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