Recomentação geral, PRAGMA AUTONOMOUS TRANSACTION é *gambiarra*, evite ao máximo seu uso. Se você chegou a esta alternativa, pense mais uma vez. Provavelmente há uma forma melhor de resolver isso. Em ultimos casos, (depois de listar umas 10 opções que não funcionaram), coloque isso no codigo e documente muito bem.
2011/5/15 Lo Bello <rogerio...@gmail.com>: > Valeu Chiappa, > > o problema é que peguei o banco "pronto", e foi me pedido para apenas criar > as PKs e FKs do banco sem alterar sua estrutura. > > Mas um cara do grupo me falou que dá pra fazer uma FK relacionando a mesma > tabela, isso eu não sabia e já resolve meu problema... > > Rogério > > Em 13 de maio de 2011 20:52, José Laurindo <jlchia...@yahoo.com.br>escreveu: > >> >> >> Rogério, antes de mais nada tenho que comentar que essa modelagem não me >> parece estar lá muito correta : SE há relacionamento de pai e filho (ie, a >> informação B tem Dependência de uma outra informação A), logicamente isso >> *** DEVERIA *** ter sido modelado como PK e FK, foi Exatamente para Isso que >> se inventou as constraints no banco de dados..... Modelar tudo numa só >> tabela Necessariamente significa jogar PELA JANELA o código todo, os >> recursos TODOS nativos do banco de dados referentes à integridade e vc >> Necessariamente terá que escrever e escrever código e mais código, que >> portanto TERÁ que ser mantido depois... >> >> Bom, isso posto : quando vc apela pra "constraints" via trigger (com aspas >> TOTAIS aí nessas "constraints", o que vc teria aí é um quebra-galho >> Trabalhoso e escrito por vc) , vc TEM QUE levar em conta um item muito >> importante : o seu banco NÃO é mono-usuário, imagino, então NADA impede que >> uma sessão A não enxergue os dados que uma sessão B está inserindo/alterando >> ao mesmo tempo, e portanto o SELECT retorne zero pra A, aí vem o COMMIT, e >> vc ficar com um registro órfao ... Idem pra performance, vai ficar >> Absolutamente, Totalmente por sua conta qqer coisa nesse sentido, E ao mesmo >> tempo vc deixa de usar o código compilado, dentro do banco, e o vai >> substituir por código INTERPRETADO, como é o PL/SQL, sabe-se lá que tipo de >> resultado vc vai obter : pode até ser aceitável pra vc, mas eu não poria a >> mão no fogo... >> >> []s >> >> Chiappa >> >> --- Em oracle_br@yahoogrupos.com.br, Eduardo Souza <pjabrantes@...> >> escreveu >> > >> > Em 12 de maio de 2011 15:24, Lo Bello <rogerioblb@...> escreveu: >> >> > >> > > O que eu posso te dizer é que uma procedure com Pragma >> > > Autonomous_Transaction pode executar insert com commit independente de >> uma >> > > outra procedure que a tenha chamado. Aqui na minha instalação >> utilizamos >> > > isso para gravação em tabela de 'LOGS' onde podemos acompanhar o >> andamento >> > > da execução do processo antes que este tenha acabado. >> > > >> > > Pessoal, >> > > >> > > Tenho uma tabela com os campos CONTA e CONTA_MAE, o campo CONTA_MAE se >> > > refere a outras linhas da mesma tabela. >> > > >> > > O problema é que tenho uma trigger que ao deletar um registro no ON >> DELETE >> > > verifica se existe alguma conta com o campo CONTA_MAE mencionando esse >> > > registro deletado, mas a trigger dá mutante. >> > > >> > > Achei uma solução usando "Pragma Autonomous_Transaction", mas li em >> alguns >> > > lugares que esse comando pode te causar alguns problemas se usado de >> forma >> > > incorreta. >> > > >> > > alguém sabe me dizer se existe alguma problema em uso-la assim: >> > > >> > > CREATE OR REPLACE TRIGGER TBCONTA_TR >> > > BEFORE DELETE ON TBCONTA >> > > FOR EACH ROW >> > > DECLARE >> > > V_CONT NUMBER; >> > > Pragma Autonomous_Transaction; >> > > BEGIN >> > > SELECT COUNT(*) INTO V_CONT FROM TBCONTA WHERE CONTA_MAE = :OLD.CONTA; >> > > IF V_CONT <> 0 THEN >> > > RAISE_APPLICATION_ERROR( -20151,'Esta conta tem contas abaixo dela, >> > > delete-as primeiro!'); >> > > END IF; >> > > END; >> > > >> > > Rogério >> > > >> > > [As partes desta mensagem que não continham texto foram removidas] >> > > >> > > >> > > >> > >> > >> > [As partes desta mensagem que não continham texto foram removidas] >> > >> >> >> > > > [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 > > > -- Ivan Ricardo Schuster OCP 10g/11g OCE RAC 10g/Linux