【问题标题】:DDL doesn't work as expect inside Oracle blockDDL 在 Oracle 块中无法按预期工作
【发布时间】: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;
    /

【问题讨论】:

    标签: oracle plsql ddl


    【解决方案1】:

    您确实看到 drop column alter 命令有错字“alter tabe...”,对吗?如果这是您尝试运行的代码,则一旦遇到此语句,您应该会看到错误消息,并且您的过程只执行前两个执行语句。

    【讨论】:

    • 感谢 DCookie,问题是我忘记设置 serveroutput,所以我认为每个命令都可以正常运行。
    • 在这种情况下,最好不要使用异常处理程序 ;-)
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 2020-12-25
    • 2018-08-21
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多