Precisione e scala del numero a punto fisso
Database diversi supportano una precisione massima o una scala diversa per i tipi di numeri a punti fissi.
Se il tipo di numero a punti fissi di origine supporta valori di precisione o scala più grandi della destinazione e è previsto un possibile troncamento dei dati per una colonna non KEY, viene visualizzato un messaggio di avvertenza e viene utilizzato un tipo di dati stringa appropriato nella destinazione per evitare il troncamento dei dati. Tuttavia, se è previsto il troncamento dei dati per una colonna KEY di tipo numero a punti fissi, Replicat viene interrotto con il messaggio di errore corrispondente. Dovrai scegliere AUTOSCHEMAOPTIONS TYPEMAP o utilizzare AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION per continuare.
Gli scenari riportati di seguito descrivono l'uso di queste opzioni.
-
Se il troncamento dei dati è previsto con un'opzione specificata dall'utente (
AUTOSCHEMAOPTIONS TYPEMAPoAUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION), i dati vengono troncati con un messaggio di avvertenza corrispondente.Ad esempio:
MySQL ha una precisione decimale massima di 65, ma Oracle è 38. Pertanto,
DECIMAL(65,10)verrà mappato aVARCHAR2in Oracle.La scala di destinazione potrebbe essere regolata automaticamente mantenendo il rapporto precisione/scala se la scala di origine è più lunga della precisione di destinazione.
Ad esempio:
Con
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION,DECIMAL(65,40)di MySQL sarà mappato aNUMBER(38,23)su Oracle eDECIMAL(65,64)di MySQL sarà mappato aNUMBER(38,37)su Oracle. -
Il tipo
NUMBERsenza alcuna precisione e scala esplicita viene gestito nel modo seguente:Il tipo
NUMBERè supportato solo in Oracle e TimesTen. Nella release di anteprima, TimesTen non è supportato. Se il tipo di dati di origine èNUMBER(senza precisione o scala esplicita) e se il database di destinazione supporta anche il tipo di datiNUMBER, il tipo di datiNUMBERdi destinazione viene utilizzato nella destinazione.Se il database di destinazione non supporta il tipo di dati
NUMBER, nella destinazione viene utilizzato il tipo di stringa appropriato, ad esempioVARCHARoVARCHAR2.Esempio:
NUMBER(5,-2)è mappato aDECIMAL(7,0)NUMBER(1,2)è mappato aDECIMAL(2,2) -
Se la precisione o la scala utilizzata nella colonna di origine è maggiore di quanto può essere supportato nella destinazione e se la colonna corrispondente fa parte della chiave, è possibile utilizzare un tipo di stringa nella destinazione per evitare il troncamento dei dati nella destinazione, che può sconfiggere la proprietà di univocità nella tabella di destinazione. Questo può essere controllato da un parametro
AUTOSCHEMAOPTIONS.