доступ к значениям в операторе слияния - PullRequest
2 голосов
/ 15 августа 2011

У меня есть следующая процедура слияния.Как получить доступ к значениям из оператора слияния в части обработки исключений ...

procedure merge_students
is 
begin
        merge into
              students a
            using
              studentstmp t
            on
              (a.code = t.code)
            when matched then update set a.name = t.name,

            when not matched then insert (code,name)
                                  values (t.code,t.name);
            EXCEPTION
                 WHEN DUP_VAL_ON_INDEX THEN
                    dbms_output.put_line('students code: ' || a.code); //how to access a.code here
                    dbms_output.put_line('studentsTMP code: ' || t.code); // and t.code here
end;

1 Ответ

4 голосов
/ 15 августа 2011

В зависимости от версии Oracle, вы можете использовать протоколирование ошибок DML.Что-то вроде

Создание исходной и целевой таблиц с данными

SQL> create table foo (
  2    col1 number primary key,
  3    col2 number unique
  4  );

Table created.

SQL> create table foo_temp (
  2    col1 number,
  3    col2 number
  4  );

Table created.

SQL> insert into foo values( 1, 1 );

1 row created.

SQL> insert into foo_temp values( 2, 1 );

1 row created.

SQL> insert into foo_temp values( 3, 2 );

1 row created.

Создание таблицы журнала ошибок

SQL> exec dbms_errlog.create_error_log( 'FOO' );

PL/SQL procedure successfully completed.

MERGE с синтаксисом LOG ERRORS

Обратите внимание, что одна строка была успешно объединена, а одна строка сгенерировала уникальное исключение ограничения и была записана в таблицу ошибок.*

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