web-dev-qa-db-fra.com

décimal (s, p) ou nombre (s, p)?

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 -

  1. comment ces données sont-elles traitées en interne?
  2. y a-t-il un coût d'utilisation des types ANSI au lieu des types intégrés d'Oracle?
  3. Y aura-t-il un impact pendant la migration des données si le type cible était de type intégré Oracle?
17
Gyan

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   
18
Vincent Malgrat