Вы можете попробовать это
1 MERGE
2 INTO target_table tgt
3 USING source_table src
4 ON (src.object_id = tgt.object_id)
5 WHEN MATCHED
6 THEN
7 UPDATE
8 SET tgt.object_name = src.object_name
9 , tgt.object_type = src.object_type
10 WHEN NOT MATCHED
11 THEN
12 INSERT (tgt.object_id
13 , tgt.object_name
14 , tgt.object_type)
15 VALUES (src.object_id
16 , src.object_name
17 , src.object_type);
Синтаксис сначала выглядит немного устрашающе, но если мы читаем через сверху вниз, это вполне интуитивно. Обратите внимание на следующие пункты:
• MERGE (строка 1): как указано ранее, это уже четвертый оператор DML в Oracle. Любые подсказки, которые мы могли бы добавить, напрямую следуют этому ключевому слову (т. Е. MERGE/* + HINT * /);
• INTO (строка 2): так мы указываем цель для MERGE. Цель должна быть либо таблицей, либо обновляемым представлением (встроенное представление здесь не может быть использовано);
• ИСПОЛЬЗОВАНИЕ (строка 3): предложение USING представляет собой исходный набор данных для MERGE. Это может быть отдельная таблица (как в нашем примере) или в виде строки;
• ON() (строка 4): предложение ON - это то, где мы поставляем соединение между исходным набором данных и целевой таблицей. Обратите внимание, что условия соединения должны быть в скобках;
• WHEN MATCHED (строка 5): в этом разделе мы инструктируем Oracle о том, что делать, когда у нас уже есть соответствующая запись в целевой таблице (т. Е. Существует соединение между исходными и целевыми наборами данных). В этом случае мы, очевидно, хотим UPDATE. Одним из ограничений этого предложения является то, что мы не можем обновить ни один из столбцов, используемых в предложении ON (хотя, конечно, нам не нужно, поскольку они уже совпадают). Любая попытка включить столбец объединения приведет к возникновению неинтуитивного исключения недействительного идентификатора; и
• КОГДА НЕ СООТВЕТСТВУЕТ (строка 10): этот раздел является местом, где мы записываем записи INSERT, для которых нет текущего совпадения.
Чтобы спасти кого-либо еще, выполняющего математику, один миллион за пять дней составляет порядка 140 минут или 2 секунды. –
Что говорит объяснительный план? Можете ли вы публиковать заявления? – Martin