Главная » Программирование » Основы SQL. Оператор MERGE
Русфонд

Основы SQL. Оператор MERGE

23 февраля 2013 - Рубрики Программирование

2994 просмотров

В сайдбар справа добавлена кнопка Google+. Если вам поможет данный материал, прошу вас нажмите на кнопку - порекомендуйте сайт в Google.

Всем привет!

Недавно столкнулся с задачей автоматизацией загрузки данных в Айтиду, при том что данная процедура производится периодически. Соответственно, при загрузке нужно проверять, если такая запись есть, то данные нужно обновить, в противном случае необходимо вставить новую запись.

Да, конечно, можно проверять подзапросом существование данной записи в таблице, но есть более удобный способ с помощью оператора языка SQL MERGE

Синтаксис оператора следующий:

MERGE first_table f
USING
 (
запрос SELECT
 ) my ON СОЕДИНЕНИЕ
 WHEN MATCHED THEN
  UPDATE SET
   f.<поле1> = <значение1>.
   f.<поле2> = <значение2>...
 WHEN NOT MATCHED THEN 
	INSERT (<поле1>,<поле2>, ...)
	VALUES (<значение1>.<значение2>. ...);

Для примера можно показать такой запрос (он конечно бессмысленный, но зато не заумный).

MERGE import f
USING
 (
 select * from import_file
 ) my ON f.bc = my.bc
 WHEN MATCHED THEN
  UPDATE SET
   f.num_part = f.reproduct+'123'
 WHEN NOT MATCHED THEN 
	INSERT (bc)
	VALUES (ltrim(rtrim(my.bc)));

Первая таблица import — это таблица, с которой мы работаем (обновляем данные или вставляем). После слова Using мы пишем запрос и после ключевого слова ON соединяем этот запрос по какому-то полю, в данном случае по полю bc. Соответственно в секции WHEN MATCHED описываются действия, которые будут выполняться если данная запись из SELECT-a нашлась в первой таблице import.

В самой Айтиде это выглядело так:

Опять же повторюсь, что эту схему можно сделать и через CASE WHEN EXISTS, но данный вариант более компактен, а возможно и лучше работает

Если этот материал оказался вам полезен, порекомендуйте его в в Google, нажав кнопку Google+ справа в сайдбаре или через кнопки социальных сервисов ниже.

П.С. не забудьте оставить комментарий к статье, а также поделиться ссылкой с друзьями и коллегами через социальные сервисы или скопировав ссылку на статью ниже. Кроме того, вы можете предложить тему статьи через кнопку слева "Предложить тему статьи". Там же можно оставить пожелания, идеи по развитию сайта, а также благодарности (ну а вдруг)
П.П.С. предлагаю вам также вступить в Группа Вконтакте!группу Вконтакте, где вы сможете пообщаться с участниками на интересующие вас темы. Смелее!!!
Если вы больше времени проводите в Twitter, то за обновлениями на сайте можно следить, подписавшись на мою лентуTwitter: follow me!

 

Возможно вам также будут интересны статьи :

 

Предыдущие материалы из данной категории:

Комментариев: 0 , , , , ,

Понравилась статья? Поделитесь ссылкой




Оставьте комментарий:




:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

Я человек, а не бот.