下面的两个脚本(用于更改表)是否会产生差异.. ??
脚本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=;
答案 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 '' );