Можно ли записывать ошибки в коллекцию или временную таблицу для ошибочных записей из операции DML? - PullRequest
0 голосов
/ 03 июля 2019

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

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

У меня есть несколько вопросов, касающихся этого -

  1. Можно ли использовать коллекцию или временную таблицу вместо таблицы журнала ошибок (которая создается с использованием DBMS_ERRLOG.create_error_log или ручной таблицы)

  2. Является ли LOG ERRORS INTO единственным способом «продолжить вставку в случае ошибочных записей и вернуть информацию журнала для ошибочных записей»?

3. Будут ли ошибки в журнале INTO работать, если в операторе DML используется предложение RETURNING INTO?

Спасибо!

1 Ответ

0 голосов
/ 03 июля 2019

1 - Коллекция не может быть использована, и ошибка загрузки во временную таблицу не имеет преимуществ перед использованием фактической таблицы. Вы можете использовать таблицу ошибок с выбранным вами именем, передав опцию err_log_table_name DBMS_ERRLOG.CREATE_ERROR_LOG. Таким образом, ваше приложение может напрямую читать из таблицы, а не использовать коллекцию.

2 - Нет, это не единственный способ в PL / SQL. Вы можете использовать BEGIN.. EXCEPTION END, чтобы пропустить ошибку, используя автономную процедуру.

LOOP
  BEGIN
  INSERT INTO .. --your insert statement that may cause error
  EXCEPTION
   autonomous_procedure_to_log_errors(error_params); 
                            --pass appropriate error messages 
                            --and table names
  END;
END LOOP

3 - RETURNING INTO можно использовать с LOG ERRORS INTO

Я хотел бы добавить следующее: если вы хотите использовать Bulk DML, используя BULK COLLECT и FORALL, существует опция SAVE EXCEPTIONS в коллекцию, а затем чтение из встроенной коллекции SQL%BULK_EXCEPTION. Проверьте этот пост, чтобы узнать больше.

...