Edison

Muito boa a solução!  =^D

[ ]

André


Em 01/12/07, Edison Eduardo Bonomi <[EMAIL PROTECTED]> escreveu:
>
>   Galera, creio que assim seja mais fácil:
>
> ----------------------------------------
> -- SELECIONANDO O PRIMEIRO CODIGO VALIDO
> ----------------------------------------
> select nvl(min(codigo),0)+1
> from sequencia
> where (codigo+1) not in (select codigo from sequencia);
>
> Att,
>
> Edison Eduardo.
>
>
> Gabriel Herdt <[EMAIL PROTECTED] <gabrielherdt%40gmail.com>>
> escreveu:
> Eu concordo com vocês. acho besteira ter que preencher números vagos.
> Mas não tem meios de convence o chefe hehehe.
> Uma solução é colocar sequence já que essa tabela tem um alto volume
> de dados. e assim nao precisar preencher os numeros vagos.
>
> Mas a solução ótima seria preencher os vagos rápido :D
>
> resumindo: é importante sim. não uso sequence porque preciso preencher
> números vagos(delatados)
>
> --- Em oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>,
> "Andre Santos"
> <[EMAIL PROTECTED]> escreveu
> >
> > Gabriel
> >
> > Pegando carona na pergunta do Roberto... é tão importante assim não
> deixar
> > números "vagos" na seqüência?
> >
> > [ ]
> >
> > André
> >
> >
> > Em 28/11/07, Roberto Amorim <[EMAIL PROTECTED]> escreveu:
> > >
> > > Pode parecer ingenuidade minha, mas, porque não usar o sequence?
> > >
> > > Gabriel Herdt escreveu:
> > > > Pessoal to com um problema. Fiz essa função no meu oracle 10g
> > > > enteprise. em que ele faz um sequence do campo x e da tabela x.
> > > > A função atende muito bem ate um certo numero de dados na tabela
> > > > depois fica muito lento(20.000 registros +).
> > > >
> > > > O que posso fazer para otimizar a rotina?
> > > > Objetivo dela é fazer seqüencia, e no caso de algum código for
> > > > detetado. o próximo cadastrado assuma seu lugar.
> > > >
> > > > FUNCTION FN_NVAGO
> > > > ( pn_nomeCAM IN VARCHAR2,-- parametro Nome do campo
> > > > pn_nomeTab IN VARCHAR2,-- parametro Nome da Tabela
> > > > pr_texto OUT varchar2) -- Paramentro de saida msg de erro
> > > > RETURN NUMBER IS
> > > > ln_cont NUMBER;-- variavel de retorno informando o menor "buraco"
> > > > na sequencia
> > > > ln_tam NUMBER; -- variavel informando o maior numero da sequencia
> > > > i NUMBER; -- contador do loop
> > > > BEGIN
> > > > pr_texto := '';
> > > >
> > > > --SQL PARA vereficar maior numero da sequencia do campo e tabela
> > > > infomado por parametro
> > > > EXECUTE IMMEDIATE 'Select Max('||pn_nomeCAM||') FROM '||pn_nomeTAB
> > > > into ln_tam;
> > > > if ln_tam is null then
> > > > Return 1;
> > > > end if;
> > > > --For de 1 ate numero maximo de sequencia
> > > > FOR i IN 1..ln_tam LOOP
> > > > -- select para localizar "buracos" na sequencia e informar
> > > > menor numero faltando na seq
> > > > EXECUTE IMMEDIATE 'Select count('||i||') From '||pn_nomeTab||'
> > > > Where '||pn_nomeCAM||' = '||i into ln_cont;
> > > > IF ln_cont = 0 THEN
> > > > RETURN i;
> > > > EXIT;
> > > > END IF;
> > > > END LOOP;
> > > > If ln_cont = 1 THEN -- se nao achar nada pega o maior numero de
> > > > sequencia e somar mais 1
> > > > return ln_tam+1;
> > > > end if;
> > > > EXCEPTION
> > > > WHEN OTHERS THEN
> > > > ROLLBACK;
> > > > pr_texto := 'Erro -3000 : Erro ao gerar sequencia';
> > > > DBMS_OUTPUT.put_line (SUBSTR ('Error ' || TO_CHAR (SQLCODE) || ':
> > > > ' || SQLERRM, 1, 255));
> > > > END;
> > > >
> > > >
> > > >
> > > >
> > > >> Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package »
> > > Procedure » Scripts » Tutoriais acesse:
> > > http://www.oraclebr.com.br/codigo/ListaCodigo.php
> > > >>
> > > > ----------------------------------------------------------
> > > >
> > > >> 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/
> > > > ----------------------------------------------------------
> > > >
> > > >> 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]
> >
>
> ---------------------------------
> Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
> armazenamento!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>


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

Responder a