5

我正在尝试针对这些列中包含数据的数据库将 dataType 从 NUMBER(10,0) 修改为 NUMBER(30,0)。我必须为此使用 liquibase。我正在使用以下内容:

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

但是对于列中包含数据的表,我收到以下错误:

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

并且该列未迁移。有数据的列可以通过这种方法迁移到新的类型吗?

4

2 回答 2

1

它不是 liquibase,它是引发此错误的 oracle 引擎。Liquibase 实际上会转换modifyDataType为 alter table 语句。因此,您对 oracle 引擎的声明将类似于:

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

现在 modifyDataType将返回由于生成的 sql 语句而返回的任何错误。

于 2013-10-22T08:57:01.590 回答
0

检查以确保该列具有您怀疑的数据类型。如果原始数据类型为 NUMBER(N,0) 其中 N < 38,则您的迁移将起作用。

于 2013-03-15T16:27:04.643 回答