在oracle中更改表中的多个列

时间:2011-03-30 05:14:59

标签: sql oracle ddl alter-table

下面的两个脚本(用于更改表)是否会产生差异.. ??

脚本1:

alter table ACNT_MGR_HSTRY add DM_BTNUMBER DATA_TYPE ;
alter table ACNT_MGR_HSTRY add DM_BTID DATA_TYPE ;
alter table ACNT_MGR_HSTRY add DM_USERID DATA_TYPE ;
alter table ACNT_MGR_HSTRY add DM_WSID DATA_TYPE ;

脚本2:

alter table  ACNT_MGR_HSTRY
add
(
DM_BTNUMBER DATA_TYPE,  
DM_BTID DATA_TYPE,
DM_USERID DATA_TYPE,
DM_WSID DATA_TYPE
);

将更新产生差异.. ???

update OPERATIONAL_UNIT
 set ( BANK_ID=
 ENTY_CODE_ID=
 TIME_ZONE=
 DM_BTNUMBER=
 DM_BTID=
 DM_USERID=
 DM_WSID=
 );
 -----------
 update OPERATIONAL_UNIT set BANK_ID=;
 update OPERATIONAL_UNIT set ENTY_CODE_ID=;
 update OPERATIONAL_UNIT set TIME_ZONE=;
 update OPERATIONAL_UNIT set DM_BTNUMBER=;
 update OPERATIONAL_UNIT set DM_BTID=;
 update OPERATIONAL_UNIT set DM_USERID=;
 update OPERATIONAL_UNIT set DM_WSID=;

3 个答案:

答案 0 :(得分:5)

两个例子are equivalent

我只使用过第一个例子中的语句;如果在出现错误时使用第二个示例格式,我不知道您是否可能不会收到错误消息。。加里迈尔斯证实了我的信念:

  

大致相同。例如,如果DM_WSID已经存在,则相关语句将失败。在脚本1中,您将添加三个列。在脚本2中你不会。如果您有DDL触发器或AUDIT,那么对于案例1,它们将被多次触发。脚本1将多次提交并且可以等待多次独占表锁。

答案 1 :(得分:4)

脚本2通常比脚本1执行得更好。对类似的更改进行分组并一次执行它们几乎总是更快。但真正的问题是,差异是否显着?

根据您对50个表格的评论,每个表格有15列,我会说差异至少有些显着,可能非常重要,具体取决于您的配置。

就在昨天,我做了几乎完全相同的更改,为大约100个表修改了大约30列。使用SQL * Plus在本地运行脚本,时间从2分钟减少到4秒。大部分时间可能花在SQL * Plus和数据库之间进行通信。如果你有一个需要远程运行的SQL * Plus脚本,这些往返可能会使你的脚本变得非常缓慢。

答案 2 :(得分:1)

我们可以通过将我们需要更改它的每一列括起来修改我们的列。 这里的实例: -

Alter table news 
modify (Newsid        number   primary key              )
modify (newsArticleNo number   check (newsArticleNo > 0))
modify (NewsArea      char(15) default ''               );