se deve aplicar este recurso. Fundamentacao Teorica Uma Transacao Autonoma e uma transacao que e inicializada por outra transacao, e opera de modo independente da transacao que a invocou. A transacao autonoma sempre deve terminar antes de devolver o controle do processo para transacao que a invocou. E se a transacao autonoma terminar com commit os dados serao gravados no banco de dados ainda que e a transacao principal falhe e realize um rollback. Os programas que usam transacao autonoma, tambem sao conhecidos como programas cujo escopo opera sobre transacoes multiplas. Isso aumenta a complexidade dos programas, o que implica em ter sempre certeza dos beneficios e conhecer os riscos de se trabalhar com multiplas transacoes. Os objetos sequencias do Oracle se comportam como uma transacao autonoma. Ao chamar o metodo nextval de uma sequencia, a mesma sempre ira para o proximo valor independente do sucesso ou fracasso da transacao que chamou o nextval. Deve ficar claro que uma transacao autonoma nao sabe nada da transacao que a invocou, entao atualizacoes feitas dentro de um contexto de transacao nao serao visiveis pela transacao autonoma. Caso uma transacao faca insercao em um registro, e logo depois invoque uma transacao autonoma e esta tente consultar o novo registro, a excecao no_data_found sera lancada. Pois o novo registro esta disponivel apenas para primeira transacao ate que seja aplicado o commit na mesma. Dentro da PL/SQL, o comportamento padrao e que os procedimentos participem de uma mesma transacao, ou seja, se o procedimento "A" chamar o procedimento "B" ambos participarao da mesma sessao de transacao. Logo para o sucesso da transacao, os dois procedimentos devem ser executados com exito. Para que o procedimento "B" mude este comportamento deve ser usado o Pragma AUTONOMOUS_TRANSACTION, que sinaliza para o compilador que o procedimento B nao ira participar da transacao do procedimento A. O procedimento B operara sobre o escopo de uma nova transacao, que e a transacao autonoma, e antes do procedimento B devolver o controle para o procedimento A, ele deve terminar a transacao. A sintaxe e a seguinte: create or replace procedure proc_au is Pragma Autonomous_Transaction; begin <<>> Commit; end; Devido a essa caracteristica, a transacao autonoma e muito usada para geracao de log's. Pois para rastrear o que causou a falha em uma transacao e preciso reconstruir o que a transacao fez. Entretanto, se os logs foram gerados dentro do contexto da transacao que falhou, o rollback ira desfazer tudo que a transacao fez inclusive os logs. Por isso o ideal e que os log's sejam gerados a partir de uma transacao autonoma. Para criacao do Log, e preciso a criacao de uma tabela, que armazenara os erros decorrentes nos processos de negocio. CREATE TABLE Log_Error ( error_id number(9) CONSTRAINT PK_error PRIMARY KEY, processo_nome varchar2(255), error_code number(9), sqlerror_message varchar2(2000) , user_error varchar2(30), date_error date); create sequence SEGLog_Error start with 1 increment by 1 nocache; Apos a criacao da tabela, a insercao nesta tabela do log de erro deve ser feita por um procedimento autonomo. create procedure InsereLog(p_processo_nome Log_Error. processo_nome%type) is Pragma Autonomous_Transaction; v_sqlcode number; v_sqlerrm