Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CarlosH

[Resolvido] Procedure Oracle

Recommended Posts

Boa tarde a todos!

Preciso criar uma procedure simples, porém não tenho muito conhecimento em PL/SQL.

Com a package dbms_random, preciso inserir um registro(coluna cpf - char(11)) diferente para cada linha. Preciso percorrer a tabela inteira e ir inserindo um cpf diferente para cada linha. Segue o modelo que fiz, porém com ele, estou inserindo um registro somente na primeira linha. Quem puder me ajudar eu agradeço!

 

 

PROCEDURE PRC_INSERE_TESTE is
  --
  linha NUMBER;
  --
  CURSOR c_exclui is select rownum 
                     from teste
                     where rownum < 65536;
  --
  Rc_exclui 			c_exclui%rowtype;
  --
  BEGIN
    --
    linha := 0;
    FOR RC_EXCLUI IN C_EXCLUI LOOP
        --
        linha := linha + 1;
        --

        begin
          update teste
          set cpf = (select to_char(trunc(dbms_random.value(10000000000,99999999999))) from   dual)
          where rownum = linha;
          commit;
        EXCEPTION
       		WHEN OTHERS THEN
       			RAISE_APPLICATION_ERROR(-20011,' erro update '||SQLERRM);

        end;
        --

        --
    END LOOP;
    --
  EXCEPTION
 		WHEN OTHERS THEN
 			RAISE_APPLICATION_ERROR(-20011,'EXCEPTION DO CURSOR - PRC_INSERE_TESTE.'||SQLERRM);
  --
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está inserindo e sim atualizando (update) os registros da tabela teste.

 

Quantas linhas tem esta tabela ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falei errado, é porque os outros campos já estão preenchidos, por isso não tem como eu dar um insert.

Tem 65000 linhas.

Por favor se puder me ajude.

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

PROCEDURE PRC_INSERE_TESTE is
   --
   --
   CURSOR c_exclui is select rownid 
                      from teste
                      where rownum < 65536;
   --
   Rc_exclui                    c_exclui%rowtype;
   --
   BEGIN
     --
     linha := 0;
     FOR RC_EXCLUI IN C_EXCLUI LOOP
         --
         --
 
         begin
           update teste
           set cpf = (select to_char(trunc(dbms_random.value(10000000000,99999999999))) from   dual)
           where rowid = RC_EXCLUI.ROWID;
           commit;
         EXCEPTION
                        WHEN OTHERS THEN
                                RAISE_APPLICATION_ERROR(-20011,' erro update '||SQLERRM);
               
         end;
         --
                
         --
     END LOOP;
     --
   EXCEPTION
                WHEN OTHERS THEN
                        RAISE_APPLICATION_ERROR(-20011,'EXCEPTION DO CURSOR - PRC_INSERE_TESTE.'||SQLERRM);
   --
END;

Deve funcionar , porém os cpf´s gerados assim não passam no teste do dígito claro.

 

 

rownid é o endereço direto de uma linha Oracle.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta!

Como digo sempre, muito obrigado por mais uma dúvida resolvida tão rapidamente, fóruns como este deveriam ter destaque maior por possuir pessoas tão bem treinadas e que ajudam nós que estamos começando a resolver problemas.

Estou criando uma base para usar em um DataWarehouse e espero poder continuar contando com a ajuda de vocês.

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou também em um projeto DW quem sabe trocamos algumas ideias.

 

Falou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.