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 <lgfco...@gmail.com>
Para: oracle_br@yahoogrupos.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#BABFACFA

--- Em oracle_br@yahoogrupos.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/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

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

Responder a