我有一个关于在oracle块中运行ddl脚本的问题。
基本上我想要一些数据迁移。如果列的数据类型已更改,我想首先创建一个临时列,将源列数据复制到临时列,然后删除源列,将temp列重命名为source,以完成迁移过程。但是当我运行下面的脚本时,它只会创建一个新的临时列并将数据复制到新列,但它永远不会运行最后两个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;
/
答案 0 :(得分:2)
你确实看到drop column alter命令有拼写错误“alter tabe ...”,对吧?如果这是您尝试运行的代码,则只要它遇到此语句,您就会看到错误消息,并且您的过程只执行前两个执行语句。