O erro de trigger mutante é devido a vc estar fazendo select na mesma tabela
da trigger.

O Pragma Autonomous_Transaction abre uma nova sessão(diferente da mesma que
vc estava fazendo o delete) com isso acredito que vc não consiga pegar o
valor do :OLD já que esta em sessão diferente.

[]s




Em 12 de maio de 2011 15:24, Lo Bello <rogerio...@gmail.com> escreveu:

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



-- 
Fabio Martinez


[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

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a