Carga de Dados via Arquivo txt com PL/SQL

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qui, 03 Jul 2008 10:02 am

:D Bom dia a Todos,

Estou iniciando agora no mundo Oracle, através de um estágio que tive oportunidade de conhecer toda esta tecnologia.

Faz alguns dias que estou estudando persistentemente PL/SQL e a semana que vem terei o meu primeiro desafio para ser cumprido, que é o seguinte:

Tenho um arquivo txt que precisa ser carregado para 10 tabelas diferentes no banco de Dados Oracle, sendo que o commit só poderá ser realizado se não ocorrer nenhum erro durante a carga de dados, sendo que se o mesmo acontecer será necessário um rollback, gerando um log de erro que contenha exatamente o momento que o erro aconteceu, para que se tenha um controle do que está e como está sendo inserido nessas tabelas.

Bom, este é o problema que tenho pra resolver durante a semana que vem, é claro que terei uma pessoa mais experiente me auxiliando mais gostaria de já ter uma base por onde começo, para a solução do problema. Me disseram que teria que ser feito via PL/SQL porém não tenho certeza se isso é possivel, por isso venho ao fórum pedir qualquer tipo de ajuda para solução deste problema.

Qualquer tipo de ajuda é válida, já deixo meus agradecimentos a todos que puderem me ajudar.
leolima_pinheiro
Localização: Barueri

Mensagemem Qui, 03 Jul 2008 5:49 pm

O esquema é usar a package UTL_FILE para ler o arquivo texto...
Depois você só vai precisar montar a sua lógica para ler o arquivo e popular as tabelas (conforme a regra de negócio).
E se você tratar TODOS os blocos separadamente, então será tranquilo aplicar ROLLBACK e então gravar em uma tabela de log o exato momento que o erro ocorrer.
Pesquise sobre como usar a package UTL_FILE...

Bom, eu faria desta forma... hehe

T+
joaogarcia
Localização: Campinas - SP

Cordialmente,
João C. Garcia

Mensagemem Sex, 04 Jul 2008 9:16 am

Bom muito obrigado João Garcia
Realmente foi a maneira escolhida para resolver a questão, porém surgiu um outro problema, o txt que será lido pela package UTL_FILE, terão os campos das tabelas separados por ' ; ' e até agora só fiz isso delimitando as posições que os campos estão distribuidos no txt, será que você conseguiria me ajudar a a leitura do arquivo com o separador com a UTL_FILE ??

OBRIGADO !!!!
leolima_pinheiro
Localização: Barueri

Mensagemem Sex, 04 Jul 2008 12:29 pm

Opa, beleza ai...
Olha o exemplo abaixo.
É bem simples e dá pra você entender como será o tratamento do separador na leitura da linha.
Estou considerando que você já sabe como usar a package UTL_FILE para ler o arquivo.

T+

Código: Selecionar todos
DECLARE
  vLinha    VARCHAR2(100);
  vCampo    VARCHAR2(200);
BEGIN
  --
  vLinha := 'CODIGO;NOME;FONE;EMAIL;ENDERECO;ESTADO;';
  --
  FOR vPosicao IN 1.. LENGTH(vLinha) LOOP
    --
    IF SUBSTR(vLinha,vPosicao,1) <> ';' THEN
      vCampo := vCampo || SUBSTR(vLinha,vPosicao,1);
    ELSE
      DBMS_OUTPUT.put_line( vCampo );
      vCampo := NULL;
    END IF;
    --
  END LOOP;
  --
END;
joaogarcia
Localização: Campinas - SP

Cordialmente,
João C. Garcia

Mensagemem Sex, 04 Jul 2008 6:07 pm

caraaa mata o UTL_FILE para ler arquivos delimitados por ";"
usa External Table... pra mim fica tudo mais simples....
você vai fazer o seu script apenas com selects(olha qui maravilha)
você pode criar uma external table para ler o arquivo e monta um script para ler esta tabela e ir inserindo nas outras...

e para fazer o log usa o melhor comando do mundo

abre o SQL*Plus e digita
Código: Selecionar todos
spool c:\log_de_inserção_que_mandaram_eu_fazer_em_algum_lugar_usando_external_table_dia_04_de_junho_de_2008.txt

e manda braza do script =D

eu postei mais ou menos como faiz isso aqui http://glufke.net/oracle/viewtopic.php?t=3297

mais procura on forum qui tem mais coisas....

BS
gokden
Localização: Ribeirão Preto - SP

Lucas de Souza

OCA Developer
Analista de sistemas

Mensagemem Qua, 04 Nov 2009 9:09 am

esse spool funciona em procedure?
rafaelchagas.sp
Localização: Sorocaba - SP

Mensagemem Qua, 04 Nov 2009 9:13 am

sim
victorhugomuniz
Localização: Rio de Janeiro - RJ

Jesus está voltando, volte antes para Ele.

Imagem JavaBlackBelt

Mensagemem Qua, 04 Nov 2009 10:08 am

Acho que não.
SPOOL é um comando do SQL*Plus, não do PLSQL.

Ele funciona dentro de um script do Sql*plus, dai sim.
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


    Voltar para SQL

    Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes