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

Responder a