récemment, alors que nous travaillions sur un projet de migration db2 -> Oracle, nous sommes tombés sur cette situation. les développeurs créaient par inadvertance de nouvelles structures de table en utilisant des colonnes décimales (s, p). Je ne me souvenais pas qu'Oracle soutenait cela, mais certaines recherches ont montré que c'était un type de données ANSI donc pris en charge par Oracle.
Cependant, la question pour moi est restée -
Dans Oracle, ce sont les mêmes :
Les instructions SQL qui créent des tables et des clusters peuvent également utiliser des types de données ANSI et des types de données des produits IBM SQL/DS et DB2. Oracle reconnaît le nom du type de données ANSI ou IBM qui diffère du nom du type de données Oracle Database. Il convertit le type de données en type de données Oracle équivalent, enregistre le type de données Oracle comme nom du type de données de colonne et stocke les données de colonne dans le type de données Oracle en fonction des conversions affichées dans les tableaux qui suivent.
Le tableau ci-dessous cette citation montre que DECIMAL(p,s)
est traitée en interne comme 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
Cependant, l'échelle par défaut est 0 pour DECIMAL
, ce qui signifie que DECIMAL(*)
est traitée comme NUMBER(*, 0)
, c'est-à-dire 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