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
. Проверьте этот пост, чтобы узнать больше.