如何使用表中的现有行修改Oracle中的数据类型

amm*_*eer 1 oracle type-conversion oracle11g

如何numbervarchar2不删除表数据的情况下将列的DATA TYPE更改为?

Jus*_*ave 13

你不能.

但是,您可以使用新数据类型创建新列,迁移数据,删除旧列,并重命名新列.就像是

ALTER TABLE table_name
  ADD( new_column_name varchar2(10) );

UPDATE table_name
   SET new_column_name = to_char(old_column_name, <<some format>>);

ALTER TABLE table_name
 DROP COLUMN old_column_name;

ALTER TABLE table_name
 RENAME COLUMN new_column_name TO old_coulumn_name;
Run Code Online (Sandbox Code Playgroud)

如果你的代码取决于表中列的位置(你真的不应该有),你可以重命名表并在表上创建一个视图,其中包含暴露列中的列的表的原始名称.订购您的代码,直到您可以修复该错误的代码.


Lal*_*r B 5

在修改列DATA TYPE之前,您必须首先处理现有行

您可以执行以下步骤:

  1. 添加具有新名称的新列。
  2. 从旧列更新新列。
  3. 删除旧列。
  4. 使用旧列名称重命名新列。

例如,

更改表 t add (col_new varchar2(50));

更新 t set col_new = to_char(col_old);

alter table t drop column col_old 级联约束;

alter table t 将列 col_new 重命名为 col_old;

确保重新创建您拥有的所有必需索引。

您还可以尝试CTAS方法,即创建表作为选择。但是,以上是安全且优选的。