繁体   English   中英

在oracle中更改表中的多个列

[英]Altering more than one column in a table in oracle

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

脚本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=;

这两个例子是等价的

我只是在第一个例子中使用了你所拥有的陈述 ; 如果在发生错误时使用第二个示例格式,我不知道您是否可能不会得到同样好的错误消息。 加里迈尔斯证实了我的信念:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM