在sql中改变表脚本

时间:2016-03-08 17:31:07

标签: sql oracle

如果我有table_abc。现在我改变并添加几个列,如

alter table_Abc add ( congif_id number, sso number);

现在我第二次添加几列以及congif_id和sso,如:

alter table_Abc add ( congif_id number, sso number,name varchar2(100));

但这会引发错误column already exists.

即使名称相同并且添加新脚本,alter脚仍然无法运行吗?

1 个答案:

答案 0 :(得分:1)

不,这是错误的预期。如有必要,您可以使用动态SQL重新运行DDL脚本,例如:

begin
   execute immediate
   'alter table table_Abc add ( congif_id number)';
exception
   when others then 
      if sqlcode = -1430 then
         null;
      end if;
end;

begin
   execute immediate
   'alter table table_Abc add ( sso number)';
exception
   when others then 
      if sqlcode = -1430 then
         null;
      end if;
end;
...

或者如果你做了很多这样的事情:

declare
   procedure run_ddl
      ( p_sql varchar2
      , p_ignored_exception integer
      )
   is
   begin
      execute immediate p_sql;
   exception
      when others then 
         if sqlcode = p_ignored_exception then
            null;
         end if;
   end;
begin
   run_ddl ('alter table table_Abc add ( congif_id number)', -1430);
   run_ddl ('alter table table_Abc add ( sso number)', -1430);
end;