2013-03-14 10 views
5

Ich versuche, den Datentypen von NUMBER (10,0) zu NUMBER (30,0) gegen eine Datenbank mit Daten in diesen Spalten zu ändern. Ich muss dafür Liquibase verwenden. Ich verwende die folgenden:Ändern Sie DataType für Spalten mit Daten in Oracle mit Liquibase

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

Aber für die Tabellen mit Daten in den Spalten ich die folgende Fehlermeldung erhalten:

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

Und die Spalte nicht migriert. Können Spalten mit Daten auf diese Weise nicht in einen neuen Typ migriert werden?

+0

Haben Sie dieses Problem gelöst? Wie haben Sie die Datenmigration verwaltet? – Noam

Antwort

0

Überprüfen Sie, ob die Spalte den Datentyp hat, den Sie vermuten. Ihre Migration wird funktionieren IFF der ursprüngliche dataType ist NUMBER (N, 0) wo N < 38.

1

Es ist nicht liquibase, es ist die Oracle-Engine, die diesen Fehler auslöst. Liquibase konvertiert tatsächlich modifyDataType in eine alter table-Anweisung. So Ihre Aussage, die auf Oracle-Engine geht, wird sein wie:

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

Jetzt wird wieder modifyDataType irgendein Fehler als Folge der erzeugten SQL-Anweisung zurückgegeben.