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]