Команда merge: концепция
Однако теперь, с появлением Огас1е9i, мы можем использовать для выполнения подобной работы команду merge. Команда merge имеет следующий синтаксис: merge into имя_та6лицы_1 using имя_таблицы_2 on (условие_ соединения) when matched update set имя_столбца_1 = value when not matched insert (список_столбцов) values (значения_столбцов). Компоненты оператора работают следующим образом:
1. Во фразе merge into имя_таблицы_1 вы определяете таблицу, в которую собираетесь обновлять данные из существующих строк или добавлять новые данные для ранее не существовавших строк.
2. Во фразе using имя_таблицы_2 вы определяете вторую таблицу, из которой будут браться строки, с помощью которых можно определить, имеются ли уже данные для обновления. Это может быть та же таблица, что и имя_таблицы_1, или другая таблица. Однако, если имя__таблицы_1 совпадает с имя_таблицы_2 или если у этих таблиц имеются одинаково называющиеся столбцы, необходимо использовать псевдонимы таблиц и предварять все ссылки на имена столбцов точным указанием имени таблицы. В противном случае Oracle возвратит сообщение об ошибке, извещающее о том, что ссылки на столбцы определены неоднозначно.
3. Во фразе on (условие_соединения) вы определяете условия соединения, связывающие воедино обе таблицы. Условия соединения подчиняются тем же требованиям, что и при соединении таблиц (см. лекция 3). Это означает, что вы должны задать как операторы сравнения по равенству, чтобы избежать возникновения декартовых произведений, так и какие-то условия-фильтры, чтобы отсеять не требующиеся данные. Если во фразе using имя_таблмцы_2 совпадает с имя_таблицы_1. Из фразы merge into или если у двух таблиц имеются совпадающие (по имени) столбцы, необходимо при ссылках на столбцы в условиях соединения или фильтрации использовать псевдонимы таблиц или синтаксис типа таблица. столбец. В противном случае Oracle возвратит сообщение об ошибке, извещающее о том, что ссылки на столбцы определены неоднозначно.
4. Во фразе when matched then update set имя столбца_1 = value определяется столбец (столбцы), который должен обновить Oracle в первой таблице, если обнаружено совпадение со второй таблицей. Если во фразе using имя_таблицы_2 совпадает с имя_тайлиць_1 из фразы merge into или если у двух таблиц имеются совпадающие (по имени) столбцы, необходимо при ссылках на столбцы в условиях соединения или фильтрации использовать псевдонимы таблиц или синтаксис типа таблица.столбец. В противном случае Oracle возвратит сообщение об ошибке, извещающее о том, что ссылки на столбцы определены неоднозначно.
5. Во фразе when not matched then insert (спи.сок_стол6цов) values (зкачения_столбцов) вы определяете, что именно Oracle должна вставить в первую таблицу, если во второй таблице не будет найдено совпадения. Если во фразе using имя_таблицы_2 совпадает с имя_таблицы_1 из фразы merge into или если у двух таблиц имеются совпадающие (по имени) столбцы, необходимо при ссылках на столбцы в условиях соединения или фильтрации использовать псевдонимы таблиц или синтаксис типа таблица, столбец. В противном случае Oracle возвратит сообщение об ошибке, извещающее о том, что ссылки на столбцы определены неоднозначно.
СоветПри использовании команды merge неявно используется концепция вливания содержимого одной таблицы в другую на основании того, существуют ли во второй таблице соответствующие значения; тем самым расширяются принципы соединения таблиц, изложенные в главе 3. В дальнейшем обсуждении мы будем работать только с одной таблицей, используя концепцию самосоединения, с которой мы также познакомились на 3 занятии.
Дата добавления: 2015-08-21; просмотров: 646;