DDL在Oracle块中无法正常工作

时间:2011-11-01 18:32:49

标签: oracle plsql ddl

我有一个关于在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;
    /

1 个答案:

答案 0 :(得分:2)

你确实看到drop column alter命令有拼写错误“alter tabe ...”,对吧?如果这是您尝试运行的代码,则只要它遇到此语句,您就会看到错误消息,并且您的过程只执行前两个执行语句。