2014-02-19 6 views
0

У меня есть временная таблица, которая перезагружается периодически. Данные в этой таблице должны перейти в целевую таблицу (точно такую ​​же структуру), но если у меня есть дублирующиеся значения, она должна проверять последние загруженные данные и обновлять целевую таблицу.Таблицы слияния на основе проверки столбцов

Пример:

TMP_DP_REGIAO 

SG NOME LOADING_DATE 
AM RG_1102 19-FEB-14 
RO RG_1103 19-FEB-14 
AP RG_1104 19-FEB-14 
TO RG_1105 19-FEB-14 
RO RG_1106 19-FEB-14 

После того, как загружен, то эти данные должны идти в TB_DP_REGIAO (что, как я сказал, имеет ту же самую структуру).

Дело:

Если SG в TMP уже существует в TB, SQL должен проверить, если эта запись в TMP имеет больший LOADING_DATE, чем в TB. Если да, обновите TB. В противном случае игнорируйте его.

Может кто-нибудь помочь в решении этой проблемы?

Заранее благодарен!

ответ

1

Этот SQL может соответствовать вашим потребностям:

merge into TB_DP_REGIAO B 
using TMP_DP_REGIAO P 
on (P.SG = B.SG) 
when matched then update set B.NOME = case when B.LOADING_DATE < P.LOADING_DATE then P.NOME else B.NOME end, 
          B.LOADING_DATE = case when B.LOADING_DATE < P.LOADING_DATE then P.LOADING_DATE else B.LOADING_DATE end 
when not matched then insert(SG, NOME, LOADING_DATE) values(P.SG, P.NOME, P.LOADING_DATE) 
; 
+0

Спасибо! Решила мою проблему отлично !!! :) –

+0

Когда я запустил его на следующий день, когда P.LOADING_DATE на следующий день, я получаю «Ошибка SQL: ORA-30926: не удается получить стабильный набор строк в исходных таблицах». В нем говорится, что я должен «удалить любые неопределенные предложения where и переиздать dml». Вы знаете, что происходит? Запрос, казалось, был очень хорошо для меня. –

+1

Согласно этому другому сообщению SO (http://stackoverflow.com/questions/2337271/ora-30926-unable-to-get-a-stable-set-of-rows-in-the-source-tables), это может быть вызвано 'TMP_DP_REGIAO', имеющим дубликаты в поле« SG »(я предположил, что« SG »был ключом). Попробуйте проверить дубликаты ... – Emmanuel

Смежные вопросы