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

时间:2015-03-01 08:17:06

标签: oracle oracle11g type-conversion

如何在不删除表数据的情况下将列的数据类型从number更改为varchar2

5 个答案:

答案 0 :(得分: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;

如果您的代码取决于表中列的位置(您实际上不应该有),您可以重命名该表并在表上创建一个视图,其中包含表的原始名称按照代码所需的顺序公开列,直到您可以修复该错误代码。

答案 1 :(得分:2)

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

您可以执行以下步骤:

  1. 使用新名称添加新列。
  2. 从旧列更新新列。
  3. 放下旧栏。
  4. 使用旧列名重命名新列。
  5. 例如,

    alter table t add (col_new varchar2(50));
    
    update t set col_new = to_char(col_old);
    
    alter table t drop column col_old cascade constraints;
    
    alter table t rename column col_new to col_old;
    

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

    您还可以尝试 CTAS 方法,即将表格设为选择。但是,上述内容是安全且可取的。

答案 2 :(得分:0)

最有效的方法是做一个CREATE TABLE ... AS SELECT
(CTAS)

答案 3 :(得分:0)

alter table table_name modify (column_name VARCHAR2(255));

答案 4 :(得分:0)

由于我们无法使用值更改列的数据类型,因此遵循以下方法,

说您要更改类型的列名是'A',这可以通过SQL开发人员来实现。

首先按其他列(例如:datetime)对表数据进行排序。 接下来,复制“ A”列的值并将其粘贴到excel文件中。 删除“ A”列中的值并提交。 更改数据类型并提交。 再次按以前使用的列对表数据进行排序(例如:datetime)。 然后粘贴从excel复制的数据并提交。