Précision et échelle des nombres à points fixes
Différentes bases de données prennent en charge une précision maximale ou une évolutivité différentes pour les types de nombre à point fixe.
Si le type de nombre de points fixes source prend en charge des valeurs de précision ou d'échelle supérieures à celles de la cible et qu'une troncature possible des données est prévue pour une colonne non-KEY, un message d'avertissement s'affiche et un type de données de chaîne approprié est utilisé sur la cible pour éviter la troncature des données. Toutefois, si la troncation des données est prévue pour une colonne KEY de type nombre à point fixe, le processus Replicat abandonne avec le message d'erreur correspondant. Vous devrez choisir AUTOSCHEMAOPTIONS TYPEMAP ou utiliser AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION pour continuer.
Les scénarios suivants décrivent l'utilisation de ces options :
-
Si la troncature des données est prévue avec une option spécifiée par l'utilisateur (
AUTOSCHEMAOPTIONS TYPEMAPouAUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION), les données sont tronquées avec un message d'avertissement correspondant.Exemple :
MySQL a une précision décimale maximale de 65, mais Oracle est de 38. Par conséquent,
DECIMAL(65,10)sera mis en correspondance avecVARCHAR2dans Oracle.L'échelle cible peut être ajustée automatiquement en maintenant le rapport précision/échelle si l'échelle source est plus longue que la précision cible.
Exemple :
Avec
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION, le fichierDECIMAL(65,40)de MySQL sera mis en correspondance avecNUMBER(38,23)sur le fichierDECIMAL(65,64)d'Oracle et le fichierNUMBER(38,37)de MySQL sera mis en correspondance avec Oracle. -
Le type
NUMBERsans précision ni échelle explicite est géré de la manière suivante :Le type
NUMBERest pris en charge uniquement dans Oracle et TimesTen. Dans la version d'aperçu, TimesTen n'est pas pris en charge. Si le type de données source estNUMBER(sans précision ni échelle explicite) et que la base de données cible prend également en charge le type de donnéesNUMBER, le typeNUMBERcible est utilisé sur la cible.Si la base de données cible ne prend pas en charge le type de données
NUMBER, le type de chaîne approprié, tel queVARCHARouVARCHAR2, est utilisé sur la cible.Exemple :
NUMBER(5,-2)est mis en correspondance avecDECIMAL(7,0)NUMBER(1,2)est mis en correspondance avecDECIMAL(2,2) -
Si la précision ou l'échelle utilisée sur la colonne source est supérieure à ce qui peut être pris en charge sur la cible, et si la colonne correspondante fait partie de la clé, un type de chaîne peut être utilisé sur la cible pour éviter la troncation des données sur la cible, ce qui peut annuler la propriété d'unicité sur la table cible. Cela peut être contrôlé par un paramètre
AUTOSCHEMAOPTIONS.