Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1

ТЕМА: Объединить 2 таблице в Oracle 10g

Объединить 2 таблице в Oracle 10g 26 дек 2011 14:34 #3990

  • Ant24
  • Ant24 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 88
  • Спасибо получено: 5
Здравствуйте, мне необходимо объединить 2 таблицы в БД Oracle 10g.
Нужно если table.field1 = table2.field2, то делать Update, если нет, то вставлять новую строку Insert-ом. Сейчас это у меня сделано в виде довольно грамоздкой PL-SQL процедуры. На больших таблицах соответсвенно жуткие тормоза, для прикладной области (банковский сектор) это не допустимо.. Нет ли более быстрого и элегантного решения?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Объединить 2 таблице в Oracle 10g 26 дек 2011 14:44 #3991

  • apv
  • apv аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 477
  • Репутация: 6
  • Спасибо получено: 46
Коечно, есть!!)) Чтоб в таком гиганте как Oracle и не было!!))) Используйте команду merge:
MERGE INTO table1 dest
  USING (SELECT field1, field2, field3 FROM table2) source1
      ON (dest.field1 = source1.field1)
      WHEN MATCHED THEN
          UPDATE SET dest.field2 = source1.field2,
                                   dest.field3 = source1.field3
          WHERE source1.field2 IS NOT NULL
          DELETE source1.field2 IS NULL
      WHEN NOT MATCHED THEN
           INSERT (dest.field1, dest.field2, dest.field3)
           VALUES (source1.field1, source1.field2, source1.field3)
           WHERE source1.field2 IS NOT NULL

merge осуществляет слияние таблиц table1 и table2, проверяется условие table1.field1 = table2.field1, и если оно истинно, то выполняет оператор Update, если нет - Insert.
Особенность: Причем нельзя изменять поле таблицы table2 в секции Update, по которым идет связь таблиц (в данном примере field1).

Должно работать быстрее чем Pl/SQL процедура! ;-)
Спасибо сказали: Ant24

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Объединить 2 таблице в Oracle 10g 26 дек 2011 14:48 #3992

  • Ant24
  • Ant24 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 88
  • Спасибо получено: 5
Спасибо, будем пробывать!)) Не знал про такую команду. Она новая что ли? В какой версии появилась??

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Объединить 2 таблице в Oracle 10g 26 дек 2011 14:49 #3993

  • apv
  • apv аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 477
  • Репутация: 6
  • Спасибо получено: 46
Оператор Merge появился в версии Oracle 9i

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1