【问题标题】:How to alter a column datatype for derby database?如何更改 derby 数据库的列数据类型?
【发布时间】:2023-03-06 01:44:01
【问题描述】:

我正在尝试更改 derby db 列的数据类型。当前价格列设置为 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. 

我可以知道如何改变它吗?谢谢。

【问题讨论】:

    标签: sql database derby


    【解决方案1】:

    这是将 MY_TABLE.MY_COLUMN 列从 BLOB(255) 更改为 BLOB(2147483647) 的 Derby SQL 脚本:

    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;
    

    【讨论】:

      【解决方案2】:

      我认为你可以这样做:

      ALTER TABLE SCHEMA.TABLE ALTER "COLUMN-NAME" SET DATA TYPE VARCHAR(255);
      

      (column-Name SET DATA TYPE VARCHAR(integer))为Datatype String为例...

      【讨论】:

      • 要注意的是,只有在现有类型足够相似的情况下才能这样做。例如,如果它已经是 VARCHAR(128),您可以将其更改为 VARCHAR(255)。但是,如果它是 INTEGER,则不能将其更改为 BIGINT,即使直观上看起来应该是可能的。
      • 这对于增加 varchar 的列大小非常有效,并且比公认的解决方案简单得多。
      • 这在生产数据库中安全吗?我的意思是它不会破坏数据吗?谢谢!
      【解决方案3】:

      这里有一个稍微复杂的方法来以这种方式改变列的数据类型:

      1. 添加所需数据类型的新列
      2. 发出“update ... set new-column = old-column 将数据从旧列复制到新列
      3. 删除旧列
      4. 将新列重命名为旧列的名称。

      步骤稍微多一些,但最终效果是一样的。

      如果您无法确定执行此操作的 SQL 的确切细节,请告诉我们,我们会提供帮助。

      【讨论】:

        【解决方案4】:

        你可以像这样改变表格:

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

        或者在Rails,只需使用:

        change_column :table_name, :column_name, :integer
        

        【讨论】:

          【解决方案5】:

          Posgtes 解决方案:

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

          【讨论】:

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