CarlosH 0 Denunciar post Postado Agosto 4, 2009 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
Motta 645 Denunciar post Postado Agosto 4, 2009 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
CarlosH 0 Denunciar post Postado Agosto 5, 2009 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
Motta 645 Denunciar post Postado Agosto 5, 2009 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
CarlosH 0 Denunciar post Postado Agosto 6, 2009 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
Motta 645 Denunciar post Postado Agosto 7, 2009 Estou também em um projeto DW quem sabe trocamos algumas ideias. Falou. Compartilhar este post Link para o post Compartilhar em outros sites