Se for para tratar o caso de onde o delete não ocorre, basta fazer um: if sql%rowcount = 0 then rollback; end if;
Agora no caso de "dar pau", você vai ter que instrumentar o código com um bloco exception. Exemplo simplificado: begin insert into log values (...) ; delete from tabela where x = ...; if sql%rowcount = 0 then rollback; end if; commit; exeception when others then rollback; end; / Talvez seja mais elegante declarar uma exceção e lançar ela no caso do sql%rowcount ser igual a 0... mas enfim, o estilo de código fica por sua conta e/ou pelas regras do seu projeto. Também note que deixar controle de transações (commit / rollback) dentro de uma sp pode causar muitos problemas se esta for chamada por outras sps. Eu não necessariamente usaria esta abordagem, só fiz o exemplo assim para ficar compatível com o seu código. Paulo --- Em qua, 28/12/11, Giovanni Ferreira de Sousa <giovanni.so...@funasa.gov.br> escreveu: De: Giovanni Ferreira de Sousa <giovanni.so...@funasa.gov.br> Assunto: [oracle_br] Tratamento de logs Para: oracle_br@yahoogrupos.com.br Data: Quarta-feira, 28 de Dezembro de 2011, 10:56 Bom Dia galera, Estou com a seguinte situação aqui no trabalho: Um usuário solicitou que para as deleções físicas no banco, esses registros deletado deveriam ser armazendos em uma tabela de log. No schema da aplicação existe uma procedure que faz o delete nas tabelas. Para atender a demanda do usuário foi adicionado na procedure o insert na tabela de log, baseado no registro que será deletado, como segue no exemplo abaixo. Sendo assim gostaria da ajuda de vocês para o seguinte: Após o INSERT é feito o DELETE. SE o DELETE der PAU ou não for feito. Como faço pra dar ROLLBACK(no INSERT anterior)? CREATE OR REPLACE PROCEDURE DBSISMAC.sp_solicitacao_remanej_final ( estado IN NUMBER, usuario IN NUMBER, competencia IN NUMBER, DS_USERNAME IN VARCHAR2) IS BEGIN INSERT INTO DBSISMAC.TL_TMQUADRO_06 SELECT competencia AS NU_COMPETENCIA_SOLICITACAO, CO_GESTAO, CO_MUNICIPIO_IBGE, CO_CNES, NO_UNIDADE, NU_CONTRATO, DT_PUBLIC_EXT_CONTRATO, VL_TOTAL_FNS, CO_PROTOCOLO, CO_USUARIO, DT_ALTERACAO, DS_USERNAME AS DS_USERNAME, 'EXCLUÍDO' AS DS_OPERACAO, SYSDATE AS DT_OPERACAO FROM DBSISMAC.TM_QUADRO_06 WHERE SUBSTR (CO_MUNICIPIO_IBGE, 0, 2) = estado; DELETE FROM DBSISMAC.TM_QUADRO_06 WHERE SUBSTR (CO_MUNICIPIO_IBGE, 0, 2) = estado; COMMIT; END; / Atenciosamente, Giovanni [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ -------------------------------------------------------------------------------------------------------------------------- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -------------------------------------------------------------------------------------------------------------------------- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >http://www.oraclebr.com.br/ ------------------------------------------------------------------------------------------------------------------------ Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas]