- Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 6 anos, 7 meses atrás por codexedoc.
-
AutorPosts
-
11 de abril de 2018 às 3:14 pm #109263Sérgio PennacchiottiParticipante
Bom dia!
Agradeço a atenção e o tempo dispendidos pelos membros e administrador.
Preciso dar um select no xml abaixo:
151850672228451
151800672282532
151800672293261
151805672229342
Resultado do select desejado:
manifesto bl ce
1518006542471 XXXXX9642129821 151850672228451
1518006542471 XXXXX9642172424 151800672282532
1518506554255 XXXXX575295580 151800672293261
1518506554255 XXXXX5753237533 151805672229342
4 rowsAgradeço a disponibilidade e esforço
Sérgio Pennacchiotti
11 de abril de 2018 às 5:40 pm #109264José Laurindo ChiappaModeradorTudo jóia ? Então, não manjo quase NADA de XML (como DBA eu tenho tido Pouquíssimas oportunidades de necessitar mexer com isso) mas sei que existem Trocentas maneiras de vc trabalhar com dados em formato XML no RDBMS Oracle : dá pra usar uma tool built-in do banco chamada XQUERY, dá pra carregar o XML todinho numa coluna do tipo XMLTYPE e usar os comandos que extraem informação dessa coluna, dá pra fazer o PARSE (ie, interpretar cada componente) de um XML em DOM com a package DBMS_XMLDOM, dá pra usar implementações de SQL em cima do XML (no caso do Oracle é o add-on XML DB)….. Recomendo Fortemente que vc consulte na documentação Oracle online (https://docs.oracle.com , localize a SUA versão de RDBMS) localizando a documentação de referência em XML PARA A SUA VERSÃO especificamente, E converse com seu DBA pra saber qual/quais opções estão disponíveis NESSE SEU EXATO database – nem todas necessariamente estão sempre disponíveis para Qualquer database em Qualquer versão…
Como um exemplo possível, indico https://stackoverflow.com/questions/12982687/oracle-plsql-how-to-parse-xml-and-insert-into-table , onde foi usada a opção de carregar os dados XML todos numa coluna (ou variável PL/SQL) do tipo XMLTYPE e depois cada valor é extraído via ExtractValue : numa situação simples, onde vc SABE EXATAMENTE quais são as colunas a extrair (o que parece ser o seu caso), isso pode ser usado…[]s
Chiappa
8 de maio de 2018 às 12:29 am #109266codexedocParticipantebem, vamos lá:
Penso que para a proposta que voce quer, a seguinte query vai ajudar, inicialmente jogando o xml acima para a memória, com o uso “With xxx AS (Select…)” aqui tem um pulo do gato que é jogar esse cara para uma coluna do tipo xmltype.
Agora, a lógica bacana fica mesmo na criação da tabela de colunas dinâmicas usando o XMLTABLE.Foi necessário duas tabelas porque os valores estão retornado do atributo da tag e não do valor do xml…
WITH arquivo_xml AS ( SELECT XMLTYPE(
‘ ‘) xml_data FROM dual )
151850672228451
151800672282532
151800672293261
151805672229342
SELECT manifesto.manifesto
, bl.bl
, bl.ce
, xml_data
FROM arquivo_xml ax
, XMLTABLE ( ‘/root/manifesto’
PASSING ax.xml_data
COLUMNS ID FOR ORDINALITY
, manifesto VARCHAR2(20) PATH ‘@numero’
) manifesto
, XMLTABLE ( ‘$d/root/manifesto[$Mid]/bl’
PASSING ax.xml_data AS “d”
, manifesto.id AS “Mid”
COLUMNS bl VARCHAR2(20) PATH ‘@numero’
, ce VARCHAR2(20) PATH ‘/ce’
) bl -
AutorPosts
- Você deve fazer login para responder a este tópico.