Изменение более одного столбца в таблице в 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 '' );