Victor, por que tu quer “resolver” o teu caso via autonomous transaction se
tu já sabe que ela não deve ser utilizada no teu caso ?

 

Se for apenas para estudar, crie uma situação real de uso (que praticamente
só pode ser para log de erros).

Vai simplificar o caso e servir para alguma coisa.

 

procedure gravaLOGerroAT( . . . ) is

 

  pragma autonomous_transaction;

 

begin

 

   insert into xxx.log_erros

             ( . . .

             )

       values( . . .

             );

 

   commit;

 

end;

 

O commit será apenas do insert da procedure gravaLOGerroAT, que rodará em
uma transação autônoma

As demais operações executadas antes e depois da chamada da gravaLOGerroAT
permanecem na transação original.

O resultado é que será possível rodar um rollback para as demais operações,
para desfazê-las após um erro, e manter o log do erro commitado.

 

Étore

 

From: [email protected] [mailto:[email protected]] On
Behalf Of Victor Freidinger
Sent: quinta-feira, 15 de dezembro de 2011 18:02
To: [email protected]
Subject: Re: [oracle_br] Re: Dúvida Vetor

 

  

Olá Alessandro, tudo bem?

Sobre a Trigger, eu consegui resolver utilizando uma view com instead of. 

Resolveu meu problema.
O que eu gostaria de fazer é tentar resolver via autonomous_transaction, se
isso for possível responver dessa forma.

Ah, seu blog me orientou como e o que é a autonomous_transaction, porém, na
prática, ainda não consegui utilizar de forma correta(como nesse caso da
trigger).

Obrigado de qualquer forma,
Victor.

________________________________
De: Alessandro Lúcio Cordeiro da Silva <[email protected]
<mailto:alecordeirosilva%40yahoo.com.br> >
Para: "[email protected] <mailto:oracle_br%40yahoogrupos.com.br>
" <[email protected] <mailto:oracle_br%40yahoogrupos.com.br> > 
Enviadas: Quinta-feira, 15 de Dezembro de 2011 17:53
Assunto: Re: [oracle_br] Re: Dúvida Vetor

  Olá Victor,
 
 
    O problema com a trigger mutante é porque você esta dentro da trigger
consultando a propria tabela. Tente mudar a logica para não fazer o select
na tabela que esta sendo editada.
 
   Contudo caso não for possivel, você tem algumas saida, (quero escrever
sobre isso no meu blog , mas a falta de tempo complica).
 
   1º Você pode criar uma view com a mesma estrutura da tabela, criar
trigger instead of, ai você faz a sua logica consultando a tabela e depois
atualiza a tabela.
 
   2º Você pode criar duas Trigger na tabela, uma a nivel de Linha e outra a
nivel de instrução, e ainda um TYPE ou uma coleção na assinatura do pacote
de um pacote (publicado). Feito isso para cada linha afetada você inclui o
registro no TYPE e depois no final quando a trigger de instrução for
disparada você percorre a coleção e faz sua logica para cada registro.
 
  

Alessandro Lúcio Cordeiro da Silva 
        Analista de Sistema
þ http://alecordeirosilva.blogspot.com/

________________________________
De: Victor Freidinger <[email protected]
<mailto:victor_freidinger%40yahoo.com.br> >
Para: "[email protected] <mailto:oracle_br%40yahoogrupos.com.br>
" <[email protected] <mailto:oracle_br%40yahoogrupos.com.br> > 
Enviadas: Quinta-feira, 15 de Dezembro de 2011 17:10
Assunto: Re: [oracle_br] Re: Dúvida Vetor

   

Olá Luiz,

Já havia esquecido deste tópico.
Eu resolvi o problema de 2 formas diferentes, a primeira utilizando MULTISET
e a outra utilizando Bubble Sort.
Agora estou estudando outras formas de resolução.

Mas, de qualquer forma, obrigado pelo link, será de boa ajuda para estudos.

PS: O problema com a trigger com o pragma autonomous_transaction ainda
persiste.

________________________________
De: LuizG <[email protected] <mailto:lgfcosta%40gmail.com> >
Para: [email protected] <mailto:oracle_br%40yahoogrupos.com.br>  
Enviadas: Quinta-feira, 15 de Dezembro de 2011 16:06
Assunto: [oracle_br] Re: Dúvida Vetor

Oi Victor,

Você pode usar uma coleção que no PL se denomina nested table.

Dá uma olhada em:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/collections.htm#BABFAC
FA

--- Em [email protected] <mailto:oracle_br%40yahoogrupos.com.br>
, "victor_freidinger" <victor_freidinger@...> escreveu
>
> Boa tarde,
> 
> Sou novo em PL SQL e gostaria de uma ajuda na construção de um vetor.
> Hoje eu tenho dessa forma e funciona para uma necessidade primária:
> 
> 
> DECLARE
> TYPE tvetor IS VARRAY(5) OF NUMBER(3);
> 
> v tvetor;
> i NUMBER := 1;
> j NUMBER;
> k NUMBER;
> 
> pri NUMBER;
> seg NUMBER;
> ter NUMBER;
> qua NUMBER;
> qui NUMBER;
> 
> qtd NUMBER;
> 
> BEGIN
> 
> v := tvetor(5, 10, 7, 9, 1); /* recebe vetor */
> 
> WHILE i <= 5 LOOP /* looping para contagem de tamanho do vetor */
> 
> j := 1;
> qtd := 0;
> 
> WHILE j <= 5 LOOP /* looping para a verificação dos valores */
> IF v(i) > v(j) THEN /* verificação se posição x é maior que posição y */
> qtd := qtd + 1; /* contagem para atribuição de valores nas variáveis */
> END IF;
> j := j + 1;
> END LOOP;
> 
> IF (qtd + 1 = 1) THEN /* atribuindo valores as variáveis conforme a
contagem */
> pri := v(i);
> ELSIF (qtd + 1 = 2) THEN
> seg := v(i);
> ELSIF (qtd + 1 = 3) THEN
> ter := v(i);
> ELSIF (qtd + 1 = 4) THEN
> qua := v(i);
> ELSE
> qui := v(i);
> END IF;
> 
> i := i + 1;
> 
> END LOOP;
> 
> v := tvetor (pri,seg, ter, qua, qui); /* atribuindo valores no vetor */
> 
> FOR k IN v.FIRST..v.LAST LOOP /* looping para mostrar posição 1 primeiro
valor, posição 2 segundo valor, etc */
> DBMS_OUTPUT.PUT_LINE ('Posição '||k||': '||v(k));
> END LOOP;
> 
> END;
> 
> Eu gostaria de fazer desta forma:
> 
> Eu chamasse na tela, independente de tamanho fixo do vetor, os valores que
eu vou querer.
> Se necessário, pedir para informar qual é o limite de posições ou quando
eu colocar algum número ou letra, saisse fora(talvez -1). Não sei se é
possível fazer isso, mas, é uma idéia.
> 
> E o mais importante, como que eu consigo ordenar dessa forma?
> 
> Porque com valores fixos, eu limitei as variáveis e cada uma está
recebendo de uma variável conforme a verificação, mas, quando ficar mais
'dinâmico' eu não vou conseguir trabalhar dessa forma.
> 
> Será que alguém consegue me ajudar?
>

------------------------------------

----------------------------------------------------------
>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/[email protected]/ 
----------------------------------------------------------
>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]

  
      

[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/[email protected]/ 
----------------------------------------------------------
>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]





[As partes desta mensagem que não continham texto foram removidas]

Responder a