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]
>


Responder a