如何在Derby数据库中更改列的数据类型?

19

我想修改一个Derby数据库列的数据类型。当前价格列被设置为DECIMAL(5,0)。我想要将其更改为DECIMAL(7,2)。我已经这样做:

alter table item alter column price set data type DECIMAL(7,2);

但是它没有起作用,并显示错误:

Error: Only columns of type VARCHAR may have their length altered. 

请问如何修改它?谢谢。

5个回答

30

以下是Derby SQL脚本,用于将列MY_TABLE.MY_COLUMN从BLOB(255)更改为BLOB(2147483647):

ALTER TABLE MY_TABLE ADD COLUMN NEW_COLUMN BLOB(2147483647);
UPDATE MY_TABLE SET NEW_COLUMN=MY_COLUMN;
ALTER TABLE MY_TABLE DROP COLUMN MY_COLUMN;
RENAME COLUMN MY_TABLE.NEW_COLUMN TO MY_COLUMN;

8
我认为你可以这样做:
ALTER TABLE SCHEMA.TABLE ALTER "COLUMN-NAME" SET DATA TYPE VARCHAR(255);
(column-Name SET DATA TYPE VARCHAR(integer)) 是将字符串设置为数据类型的示例...

问题在于只有当现有类型足够相似时,您才能这样做。例如,如果它已经是VARCHAR(128),则可以将其更改为VARCHAR(255)。但是,如果它是INTEGER,则无法将其更改为BIGINT,即使这在直觉上似乎是可能的。 - Hakanai
2
这对于增加varchar列的大小非常有效,比被接受的解决方案简单得多。 - oneworld
这个在生产数据库中安全吗?我的意思是它不会破坏数据吧?谢谢! - Eli

3

您可以按照以下方式修改表格:

ALTER TABLE [table] ALTER COLUMN [column] SET DATA TYPE [type];

如果在 Rails 中使用,只需使用以下代码:

change_column :table_name, :column_name, :integer

3
这是一种稍微复杂一些的更改列数据类型的方法:
  1. 添加一个所需数据类型的新列
  2. 使用"update ... set new-column = old-column"将数据从旧列复制到新列
  3. 删除旧列
  4. 将新列重命名为旧列的名称。
步骤略多,但最终效果相同。
如果您在解决此问题时遇到困难,请告诉我们,我们会提供帮助。

-3

Posgtes解决方案:

ALTER TABLE prices_table ALTER price_column TYPE decimal(7,2)


1
我认为Derby不支持TYPE,它会显示错误,语法错误:在第1行第30列遇到“TYPE”。 - jl.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接