如何在不删除表数据的情况下将列的数据类型从number
更改为varchar2
?
答案 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 列之前,您必须先处理现有行。
您可以执行以下步骤:
例如,
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复制的数据并提交。