Precisión y escala del número de punto fijo
Diferentes bases de datos soportan una precisión o escala máximas diferentes para los tipos de número de punto fijo.
Si el tipo de número de punto fijo de origen soporta valores de precisión o escala mayores que el destino y se prevé un posible truncamiento de datos para una columna que no seaKEY, se muestra un mensaje de advertencia y se utiliza un tipo de dato de cadena adecuado en el destino para evitar el truncamiento de datos. Sin embargo, si el truncamiento de datos está previsto para una columna KEY del tipo de número de punto fijo, Replicat finaliza de forma anormal con el mensaje de error correspondiente. Tendrá que seleccionar AUTOSCHEMAOPTIONS TYPEMAP o utilizar AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION para continuar.
En los siguientes escenarios se describe el uso de estas opciones:
-
Si se prevé el truncamiento de datos con una opción especificada por el usuario (
AUTOSCHEMAOPTIONS TYPEMAPoAUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION), los datos se truncan con el mensaje de advertencia correspondiente.Por ejemplo:
MySQL tiene una precisión decimal máxima de 65, pero Oracle es 38. Por lo tanto,
DECIMAL(65,10)se asignará aVARCHAR2en Oracle.La escala de destino se puede ajustar automáticamente manteniendo el ratio de precisión/escala si la escala de origen es más larga que la precisión de destino.
Por ejemplo:
Con
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION,DECIMAL(65,40)de MySQL se asignará aNUMBER(38,23)en Oracle yDECIMAL(65,64)de MySQL se asignará aNUMBER(38,37)en Oracle. -
El tipo
NUMBERsin ninguna precisión ni escala explícitas se maneja de la siguiente manera:El tipo
NUMBERsolo está soportado en Oracle y TimesTen. En la versión de vista previa, TimesTen no está soportado. Si el tipo de dato de origen esNUMBER(sin ninguna precisión ni escala explícitas) y si la base de datos de destino también soporta el tipo de datoNUMBER, el tipo de destinoNUMBERse utiliza en el destino.Si la base de datos de destino no soporta el tipo de dato
NUMBER, se utiliza el tipo de cadena adecuado, comoVARCHARoVARCHAR2, en el destino.Ejemplo:
NUMBER(5,-2)se asigna aDECIMAL(7,0)NUMBER(1,2)se asigna aDECIMAL(2,2) -
Si la precisión o escala utilizada en la columna de origen es superior a lo que se puede soportar en el destino y si la columna correspondiente forma parte de la clave, se puede utilizar un tipo de cadena en el destino para evitar el truncamiento de datos en el destino, lo que puede anular la propiedad de unicidad en la tabla de destino. Esto se puede controlar mediante un parámetro
AUTOSCHEMAOPTIONS.