Изменение более одного столбца в таблице в Oracle

Будут ли два сценария ниже (для изменения таблицы) создавать diff..??

сценарий 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 ответа

Два примера эквивалентны.

Я только когда-либо использовал утверждения, которые вы использовали в первом примере ; Я не знаю, возможно ли, что вы не получите такого же хорошего сообщения об ошибке, если будете использовать второй пример формата в случае ошибки., Гэри Майерс подтвердил мою веру:

В основном то же самое. Если, например, DM_WSID уже существует, соответствующий оператор потерпит неудачу. В сценарии 1 вы получите три добавленных столбца. В сценарии 2 вы бы не стали. Если у вас есть триггеры DDL или AUDIT, то они будут срабатывать несколько раз для случая 1. Сценарий 1 будет фиксироваться несколько раз, и МОЖЕТ несколько раз ожидать эксклюзивной блокировки таблицы.

Скрипт 2, как правило, работает намного лучше, чем скрипт 1. Группировка похожих изменений и их одновременное выполнение почти всегда быстрее. Но на самом деле вопрос в том, значительна ли разница?

Исходя из вашего комментария о 50 таблицах по 15 столбцов в каждой, я бы сказал, что разница, по крайней мере, несколько значительна, а возможно, очень значительна в зависимости от вашей конфигурации.

Буквально вчера я сделал почти то же самое изменение, изменив около 30 столбцов для 100 таблиц. При локальном запуске сценария с использованием 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 ''               ); 
Другие вопросы по тегам