Как мы можем выполнить запрос SQL Merge в чанках? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть запрос на слияние, который отлично работает для нескольких записей (<500) </p>

Merge into TableA A using TableB B on (UNIQUEID = UNIQUEID) 
  when matched 
    then update 
      set
        A.id = B.id,
  when not matched 
    then insert (
      A.id
    )
    values(
      B.id
    )

Проблема возникает для больших наборов данных (> 7000)

Ошибка: MERGEЗАЯВЛЕНИЕ ORA-30926: невозможно получить стабильный набор строк в источнике

Я хочу, чтобы оператор слияния выполнялся порциями (скажем, 1000 одновременно), чтобы точная проблема с данными моглабыть идентифицированным.

1 Ответ

0 голосов
/ 05 декабря 2018

ORA-30926: невозможно получить стабильный набор строк в источнике

Эта ошибка означает, что база данных не может сопоставить одну запись в tableA с одной записью в tableB.Это делает результат MERGE непредсказуемым, а Oracle не любит непредсказуемые результаты.

Поле UNIQUEID является первичным ключом в таблице B, поэтому вероятность дублирования в этом

* отсутствует1012 * Итак, вам нужно найти повторяющиеся вхождения в tableA.Вот один из способов сделать это:
select a.uniqueid
       , count(*)
from tablea a
group by a.uniqueid having count(*) > 1

Возможно, вы захотите присоединиться к tableB, либо по соображениям производительности, либо для проверки того, что tableb.uniqueid на самом деле настолько уникален, насколько вы думаете:

select a.uniqueid
       , count(*)
from tablea a
     join tableb b on b.uniqueid = a.uniqueid
group by a.uniqueid having count(*) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...