2013-03-14 8 views
5

Próbuję zmodyfikować typ danych od NUMBER (10,0) do NUMBER (30,0) względem bazy danych z danymi w tych kolumnach. Do tego muszę użyć liquibase. Używam następujące:Modyfikuj typ danych dla kolumn z danymi w Oracle za pomocą Liquibase

<modifyDataType tableName="tableName" columnName="columnsName" newDataType="NUMBER(38,0)"/> 

Ale dla tabel z danymi w kolumnach pojawia się następujący błąd:

Caused by: java.sql.SQLException: ORA-01440: column to be modified must be empty to decrease precision or scale 

a kolumna nie zostanie przeniesione. Czy kolumny z danymi nie są migrowane do nowego typu tą metodą?

+0

Czy rozwiązałeś ten problem? Jak zarządzałeś migracją danych? – Noam

Odpowiedz

0

Sprawdź, czy kolumna ma typ danych, który podejrzewasz. Twoja migracja zadziała IFF pierwotny typ danych to NUMBER (N, 0), gdzie N < 38.

1

To nie jest laserem, jego silnikiem oracle, który zgłasza ten błąd. Liquibase faktycznie przekształca modifyDataType w instrukcję alter table. Tak swoją wypowiedź, która idzie do silnika oracle będzie jak:

ALTER TABLE tableName MODIFTY columnsName NUMBER(38,0); 

Teraz modifyDataType powróci jakikolwiek błąd powrócił w wyniku generowanego sql oświadczenia.