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]