- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 3 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
16 de agosto de 2017 às 6:23 pm #108920leosystemParticipante
Olá bom dia!
Estou processando arquivos XML (de terceiros) que, cujo conteúdo “gigantesco” está todo em uma única linha.
Em minha Package, ao utilizar “DBMS_XMLPARSER.PARSE” para processá-lo, está me gerando o erro ORA-31001 Invalid resource handle or path name
Está funcionando perfeitamente, sem erros, somente quando pego o conteúdo deste arquivo .XML e, copio-colo em um formatador online (por exemplo, Free Online XML Formatter) e, após “indentá-lo”, pego este conteúdo formatado e, copio-colo novamente dentro do arquivo .XML (substituindo o anterior)
Alguém já passou por isto? Teriam algum exemplo em PL/SQL que “automatize” dinamicamente este tratamento (indentação do conteúdo dentro do arquivo .XML) ?
Obrigado
16 de agosto de 2017 às 8:38 pm #108921José Laurindo ChiappaModeradorBom, eu não trabalho com XML files, mas se como vc diz o XML tá vindo num arquivo com uma só linha muito muito comprida, muito provavelmente vc deve estar esbarrando no limite máximo de linha do arquivo a ser processado : isso não é nada ESPECÍFICO do RDBMS Oracle, diversas ferramentas que trabalham com arquivos-texto possuem um máximo de comprimento de linha, https://www.emeditor.com/forums/topic/xml-without-line-breaks/ por exemplo é um site de Suporte de um editor de texto… Vc fala IDENTAÇÃO (o que na verdade implica em espaços em cada linha, fazendo com que cada elemento lógico comece numa coluna) mas a minha suposição é que teu problema aí é a FALTA de quebras de linha, fazendo o arquivo ser processado como uma só linha extremamente comprida…
Sendo isso : o melhor seria vc solicitar um arquivo DECENTEMENTE formatado, com elementos logicamente similares na mesma linha : se isso não for viável, eu pessoalmente Desconheço um recurso built-in no RDBMS Oracle para isso (se vc estiver na versão 11g – o que vc simplesmente não diz, então sei lá – vc poderia experimentar XMLAGG e XMLSERIALIZE, veja lá se ajuda) , então suas opções seriam :1. chamar um utilitário externo ao database especializado nisso, E que aceite executar em modo não-interativo/linha de comando : o mesmo link do editor de texto que citei no começo da resposta indica um, mas certamente trocentos outros existem … para vc chamar um programa externo de dentro do database, o programa TEM que estar no mesmo servidor do RDBMS Oracle e o usuário do Sistema Operacional que roda o RDBMS tem que ter permissão de execução no programa em questão… O Método de execução entre outros pode ser (SE seu RDBMs é pelo menos 10g!!) um SCHEDULER JOB, consulta aqui mesmo que vc acha uns exemplos…
ou
2. ler o arquivo todo de uma vez só para uma coluna CLOB de uma tabela temporária qualquer (com o built-in DBMS_LOB.LOADFROMFILE talvez, já que esse não processa linha-a-linha e portanto não está sujeito a limitações de tamanho de linha), e depois parsear o conteúdo XML dessa coluna CLOB via SELECT XMLTYPE.EXTRACT e correlatos : https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:475021425271 é um exemplo de carga de um arquivo em um LOB , e http://www.dba-oracle.com/t_extract_value_XML_from_clob.htm e https://stackoverflow.com/questions/4884421/oracle-10g-extract-data-select-from-xml-clob-type são exemplos de parse de conteúdo XML numa coluna CLOB…
Eu não tenho aqui comigo um exemplo completo de fio a pavio que junte tudo mas acredito que com esses links vc já terá uma noção…
[]s
Chiappa
-
AutorPosts
- Você deve fazer login para responder a este tópico.