Условная вставка или обновление в Oracle - PullRequest
1 голос
/ 17 января 2012

У меня есть одна таблица в оракуле, куда данные вставляются от какой-то третьей стороны. Я хочу заполнить основные таблицы из этой таблицы. Итак, что будет лучшим способом повышения производительности при использовании коллекции.

например. Предположим, таблица, в которую будут вводиться данные от третьей стороны, называется «EMP_TMP».

Теперь я хочу заполнить мастер-таблицу EMPLOYEE с помощью процедуры, которая будет заполнена из таблицы EMP_TMP.

Здесь снова есть одно условие, например, ЕСЛИ ЖЕ ЭМПИД (это не первичный ключ) СУЩЕСТВУЕТ, тогда мы должны ОБНОВИТЬ ПОЛНУЮ ТАБЛИЦУ, которая состоит из ЭТО ЖЕ ЭМПИД, В противном случае мы ВСТАВЛЯЕМ НОВУЮ ЗАПИСЬ.

[Примечание: здесь EMPID - это VARCHAR2, а EMPNO будет первичным ключом, где мы будем использовать SEQUENCE]

Я думаю, что здесь слияние не будет работать намного лучше, поскольку мы не можем использовать коллекцию в операторе MERGE.

Ответы [ 2 ]

0 голосов
/ 17 января 2012

Создайте процедуру, вам нужно использовать PL / SQL.Сначала выполните обновление, а затем протестируйте sql% rowcount.Если значение равно 0, обновления не выполняются, и вместо этого необходимо выполнить вставку.

Я думаю, что это достаточно эффективно.

псевдокод

Update table;
if sql%rowcount = 0 then
   //get new sequence number
   insert into table;
END IF;
COMMIT;

HTHХарв

0 голосов
/ 17 января 2012

Что ж, если производительность является вашим основным фактором, и вам не нравится MERGE, то как насчет этого (запуск в виде скрипта, одиночная транзакция):

delete from EMPLOYEE where emp_id IN (
select emp_id from EMP_TMP);

insert into EMPLOYEE
select * from EMP_TMP;

commit;

Очевидно, что это не "самый безопасный" подход (и, как написано, предполагает точно такие же определения таблиц, и у вас есть откат), но должен быть быстрым (вы также можете связываться с IN против EXISTS и т. д.).И я не совсем понял ваш пост, если emp_id или emp_no были общим ключом в этих 2 таблицах, но используйте тот, который имеет смысл в вашей ситуации.

...