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]