Ler arquivos xml de um diretório

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
claudioreiis01
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Ter, 25 Ago 2015 1:31 pm

Galera
Eu estou lendo um arquivo xml onde passo o nome do xml como parametro, mas eu gostaria de que quando eu não passasse o nome ele lesse todos os arquivos ( xmls) que estão no diretorio criando um loop ele fizesse pegando um a um...todos os xmls que estivessem no diretorio...
só para estar ciente eu leio um xml e carrego em uma tabela com um campo tipo xmltype onde fica todo conteudo do xml e depois eu extraio os campos...
mas para ficar mais dinâmico eu quero que ele leia todos os arquivos tipo uma lista sem precisar passar o nome dos arquivos um a um...
Eu estou utilizando funções utl_file para minha package mas não encontrei nada que eu busque todos os arquivos.
o diretório é local.
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

claudioreiis01, infelizmente não existe uma função que faça essa busca no diretório pelo que eu saiba, algumas das soluções que vi incluem criar um método em java dentro do banco, ou se estiver usando o 11g usar uma external table, é um tipo de tabela que você cria e define um arquivo que vai guardar as informações.
No 11g foi adicionado um recurso de preprocessor, você pode informar por exemplo um shell script que vai popular essa tabela, no script você colocaria os comandos do sistema operacional pra listar os arquivos.
Segue o link de referência, a leitura é um pouco longa :shock:

http://www.oracle-developer.net/display.php?id=513
claudioreiis01
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Ter, 25 Ago 2015 1:31 pm

Valeu @Souldeath pelo retorno..
Cara não existe um select para ler o diretorio e eu executar um execute immediate com um loop?

porque caso haja um select que retorne um arquivo do diretorio só será preciso criar um loop ...

eu estou lendo alguns select mas eles apenas mostram o nome diretorio criado como este por exemplo

Selecionar tudo

SELECT directory_path
INTO lv_pattern
FROM all_directories
WHERE directory_name = 'NFS_DIR';
Por isso pensei que pode ter algum select que le o arquivo do diretorio ao invés de mostrar o nome.
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

claudioreiis01, é isso mesmo que eu falei no outro post, não tem um select que retorne os arquivos contidos no diretório, você teria que criar um script no sistema operacional pra fazer isso, com os comados dir do windows ou ls no linux. O script e a tabela externa teriam que estar no mesmo diretório.
Talvez seja mais fácil fazer essa rotina do lado da aplicação do que em pl/sql :?
Responder
  • Informação
  • Quem está online

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