воскресенье, 18 января 2009 г.

Merge - Новая инструкция Firebird 2.1 для объединения данных

В Firebird 2.1 появилась новая инструкция MERGE. Это групповая операция, которая позволяет произвести произвольную выборку и объединить её с уже существующими в таблице данными. В зависимости от условия condition, будет произведено либо обновление данных - блок <merge when matched>, либо их вставка - блок <merge when not matched>. Шаблон инструкции MERGE:

<merge statement>::=
MERGE 
 INTO <table or view> [ [AS] <correlation name> ]
 USING <table or view or derived table> [ [AS] <correlation name> ]
 ON <condition>
 [ <merge when matched> ]
 [ <merge when not matched> ]

<merge when matched> ::=
 WHEN MATCHED THEN
    UPDATE SET <assignment list>

<merge when not matched> ::=
  WHEN NOT MATCHED THEN
    INSERT [ <left paren> <column list> <right paren> ]
    VALUES <left paren> <value list> <right paren>
В инструкции MERGE должно быть определено как минимум одно из выражений <merge when matched> и <merge when not matched>. Пример MERGE:

 MERGE INTO customers c
 USING (SELECT * FROM customers_delta WHERE id > 10) cd
 ON (c.id = cd.id)
  WHEN MATCHED THEN
   UPDATE SET name = cd.name
  WHEN NOT MATCHED THEN
   INSERT (id, name) VALUES (cd.id, cd.name)

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