Количество строк отклонения слияния Oracle - PullRequest
2 голосов
/ 03 июня 2010

Учитывая оператор Oracle Merge с пределом отклонения, существует ли сокращенный способ определения количества строк, которые были отклонены, без необходимости запрашивать пункт назначения отклонения?

Получатель отклонения имеет записи перед слиянием, поэтому в настоящее время его необходимо будет пересчитать дважды и принять разницу, но кажется, что должен быть выставлен счетчик, учитывая, что он должен знать, превысил ли он отклонение ограничение.

1 Ответ

2 голосов
/ 13 июня 2010

Счетчик отклонений не выставлен.

Основная цель ведения журнала ошибок DML - поддержка процессов ETL. Это позволяет нам загружать огромные объемы данных без пары ошибок, что приводит к откату всей загрузки. Я полагаю, что логическое обоснование заключается в том, что ошибки будут устранены вручную, прежде чем мы выпустим больше DML для этой таблицы: в действительности это не предназначено для предоставления постоянного журнала ошибок.

Однако, если вы присваиваете каждому выражению DML уникальный тег, вы можете подсчитать точное количество отклонений, которые оно породило.

declare
    l_tag varchar2(46);
    reject_cnt pls_integer;
begin

    ....

    l_tag := 'merging from source_table::'||to_char(sysdate, 'yyyymmddhh24miss');

    merge into target_table a
        using source_table b
        on (a.id = b.id)
      ....
      log errors into err$_target_table (l_tag) reject limit 10;

    select count(*)
    into reject_cnt
    from   err$_target_table
    where  ora_err_tag$ = l_tag;

    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...