преобразовать запрос из слияния для выбора количества в Oracle - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть запрос на слияние со следующим синтаксисом:

MERGE INTO target_table 
USING source_table 
ON search_condition
    WHEN NOT MATCHED THEN
        INSERT (col1,col2,...)
        values(value1,value2,...)
        WHERE <insert_condition>;

Но я хочу изменить этот запрос, чтобы увидеть, сколько строк будет вставлено, и использовать приведенный ниже запрос, но я не уверен, что это правильный запрос:

select count(*) from target_table where not exists (select 1 from source_table where search_condition)

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Оператор MERGE вставляет строки из source_table в target_table.То есть это данные из source_table, которых еще нет в target_table, которые вы хотите считать.

select count(*)
from source_table 
where <insert_condition>
and not exists
(
  select *
  from target_table
  where <search_condition>
);
0 голосов
/ 12 февраля 2019

Вам не нужно считать количество вставленных строк отдельно.Если вы запустили его в SQL * Plus, он показывает само число.

Если вы используете этот MERGE как часть процедуры PL / SQL, вы должны использовать SQL%ROWCOUNT:

declare
  l_cnt number;
begin
  merge into target_table
    using ...;

  l_cnt := SQL%ROWCOUNT;            --> this is what you want

  dbms_output.put_line('Inserted ' || l_cnt || ' rows');
end;

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

...