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]

Responder a