【发布时间】:2011-11-01 18:32:49
【问题描述】:
我有一个关于在 oracle 块中运行 ddl 脚本的问题。
基本上我想要一些数据迁移的东西。如果一个列的数据类型发生了变化,我想先创建一个临时列,将源列数据复制到临时列,然后删除源列,将临时列重命名为源,以完成迁移过程。但是当我运行下面的脚本时,它只会创建一个新的临时列并将数据复制到新列,但它永远不会运行最后两个 alter table 命令。谁能弄清楚问题是什么?谢谢。
create table t (a int);
insert into t values(10);
--change the data type from integer to varchar2(10);
begin
execute immediate 'alter table t modify a varchar2(10)';
exception when others then
begin
execute immediate 'alter table t add b varchar2(10)';
execute immediate 'update t set b = a';
execute immediate 'alter tabe t drop column a';
execute immediate 'alter table t rename column b to a';
exception when others then
dbms_output.put_line('cann''t change column a from integer to varchar2(10) due to error:' || sqlerrm);
end;
end;
/
【问题讨论】: