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.
Carga de Dados via Arquivo txt com PL/SQL
-
- Rank: Estagiário Pleno
- Mensagens: 4
- Registrado em: Qui, 03 Jul 2008 9:04 am
- Localização: Barueri
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
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+
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+
-
- Rank: Estagiário Pleno
- Mensagens: 4
- Registrado em: Qui, 03 Jul 2008 9:04 am
- Localização: Barueri
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 !!!!
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 !!!!
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
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+
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+
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;
-
- Rank: DBA Pleno
- Mensagens: 264
- Registrado em: Dom, 19 Ago 2007 8:18 pm
- Localização: Ribeirão Preto - SP
Lucas de Souza
OCA Developer
Analista de sistemas
OCA Developer
Analista de sistemas
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
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
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
spool c:\log_de_inserção_que_mandaram_eu_fazer_em_algum_lugar_usando_external_table_dia_04_de_junho_de_2008.txt
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
-
- Rank: Programador Júnior
- Mensagens: 17
- Registrado em: Ter, 13 Out 2009 4:52 pm
- Localização: Sorocaba - SP
esse spool funciona em procedure?
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
sim
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
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.
SPOOL é um comando do SQL*Plus, não do PLSQL.
Ele funciona dentro de um script do Sql*plus, dai sim.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes