decimal(s,p) or number(s,p)?

前端 未结 2 1645
忘了有多久
忘了有多久 2020-12-10 02:31

recently, while working on a db2 -> oracle migration project, we came across this situation. the developers were inadvertently creating new table structures using decimal(s,

相关标签:
2条回答
  • 2020-12-10 02:57

    In Oracle, they are the same:

    SQL statements that create tables and clusters can also use ANSI data types and data types from the IBM products SQL/DS and DB2. Oracle recognizes the ANSI or IBM data type name that differs from the Oracle Database data type name. It converts the data type to the equivalent Oracle data type, records the Oracle data type as the name of the column data type, and stores the column data in the Oracle data type based on the conversions shown in the tables that follow.

    The table below this quote shows that DECIMAL(p,s) is treated internally as a 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  
    

    However, the scale defaults to 0 for DECIMAL, which means that DECIMAL(*) is treated as NUMBER(*, 0), i.e. 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   
    
    0 讨论(0)
  • 2020-12-10 03:12

    Actually, there is difference between decimal and number. Decimal will truncate the value which is over-scale, number will round the value.

    0 讨论(0)
提交回复
热议问题