Pular para o conteúdo
  • Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 6 anos, 7 meses atrás por codexedoc.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #109263
    Sérgio Pennacchiotti
    Participante

      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 rows

      Agradeço a disponibilidade e esforço

      Sérgio Pennacchiotti

      #109264
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Tudo 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

        #109266
        codexedoc
        Participante

          bem, 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(



          151850672228451


          151800672282532




          151800672293261


          151805672229342


          ‘) xml_data FROM dual )
          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

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.
        plugins premium WordPress