Tags:

Oracle

Oracle – Log automático de erros em comandos DML

Uma feature simples porém muito interessante, presente no Oracle a partir da release 2 do Oracle 10g, é a DML ERROR LOGGING TABLE. Ela permite que operações DML envolvendo vários registros (bulk DML) continuem processando quando um erro ocorrer, e loga esse(s) erro(s) em uma tabela específica para essa finalidade.

A feature DML ERROR LOGGING funciona com comandos INSERT, UPDATE, MERGE e DELETE.

A seguir, um exemplo de como inserir dados com DML ERROR LOGGING:

1) Crie uma tabela para logar os erros

Essa operação pode ser feita automaticamente pela procedure DBMS_ERRLOG.CREATE_ERROR_LOG. Ela cria uma logging table com algumas colunas mandatórias para a descrição do erro, mais todas as colunas da tabela que será referenciada pelo comando.

DBMS_ERRLOG.CREATE_ERROR_LOG (<DML_table_name> [, <error_table_name>])

Como se pode ver, o nome da tabela de log é opcional. O nome default utilizado pelo Oracle será ERR$_ mais os 25 primeiros caracteres do nome da tabela do DML.

2) Execute o comando INSERT, incluindo a cláusula de log de erros

LOG ERRORS [ INTO <error_table> ] [(‘<tag>’)] [REJECT LIMIT <limit>]

Pode-se especificar UNLIMITED para a cláusula REJECT LIMIT. O valor default para o reject limit é zero, o que significa que após encontrar o primeiro erro este será logado e o comando sofrerá ROLLBACK.

Colocando em prática os passos acima:

DBMS_ERRLOG.CREATE_ERROR_LOG (‘DW_EMPL’);

INSERT INTO dw_empl

SELECT employee_id, first_name, last_name, hire_date, salary, department_id

FROM employees

WHERE hire_date > sysdate – 7

LOG ERRORS (‘daily_load’) REJECT LIMIT 25;

Como se pode ver, essa feature pode ser muito útil em longas operações de DML, onde não se deseja a interrupção da operação, com a possibilidade de se tratar os erros ocorridos posteriormente.

Por MÁRCIO NUNES JARDIM

Postado em: 27 de maio de 2011

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário