Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #97698
    Maths
    Participante

      Galera, a duvida é meio complexo, estamos com um projeto aqui no serviço e estamos fazendo a analise e talz, e queria tirar uma duvida, É POSSIVEL o DATAMART receber um arquivo XML contendo campo de colunas e seus dados e transformar isso em informação dentro do banco??

      Mais detalhado, pois é o seguinte, software eHealth vai gerar um arquivo XML, +/- assim:

      blablabla
      blablabla
      blablabla
      blablabla

      Este seria o arquivo XML, mas imenso… eu queria saber, o datamart pode receber um arquivo XML desse e converter as tags em colunas no banco e as informação dentro das tags?? O que eu disse tem logica e tem sentido, queria saber se ele aceita isso. Obrigado

      #97701
      fsitja
      Participante

        Olá,

        Você pode usar insert / select com as funções XMLTable e XMLQuery para “traduzir” o XML para um modelo relacional (ou ROLAP no seu caso?).

        Se você puder postar um exemplo da estrutura do XML, contendo alguns dados, e do formato de tabela para o qual você quer traduzí-lo, dá para tentar ajudá-lo na tarefa.

        Tem um exemplo no post abaixo que talvez ajude:
        https://www.profissionaloracle.com.br/mo … t=xmltable

        Na documentação da Oracle tem mais exemplos e sintaxe das funções:
        http://download.oracle.com/docs/cd/E118 … xquery.htm

        #97716
        Maths
        Participante

          [quote=”fsitja”:w34g50cd]Olá,

          Você pode usar insert / select com as funções XMLTable e XMLQuery para “traduzir” o XML para um modelo relacional (ou ROLAP no seu caso?).

          Se você puder postar um exemplo da estrutura do XML, contendo alguns dados, e do formato de tabela para o qual você quer traduzí-lo, dá para tentar ajudá-lo na tarefa.

          Tem um exemplo no post abaixo que talvez ajude:
          https://www.profissionaloracle.com.br/mo … t=xmltable

          Na documentação da Oracle tem mais exemplos e sintaxe das funções:
          http://download.oracle.com/docs/cd/E118 … xquery.htm[/quote]

          OTIMO!! FSITJA

          Na verdade é o seguinte, estamos desenvolvendo o datamart, e iremos criar uma tabela dentro dele para receber os dados desse XML, uma das fontes de informaçoes que irao entrar no DATA MART será esse SCRIPT em XML entende?? E esse script precisa popular as colunas da tabela que criamos de acordo com as informaçoes do XML, abaixo tem um exemplo mais detalhado do script em XML.

          Network Interface Card

          0x10029f
          5-Port 10/100/1000 Gigabit Switch
          w/WebView
          172.18.0.1
          OTPRDSW01-link-100000
          OTPRDSW01-link-100000
          172.18.0.1
          172.18.0.1

          SPECTRUM
          172.18.0.1
          1

          5
          Generic Lan/Wan

          Yes

          Network Switch
          3C:DF:1E:F8:C8:F1
          0x10030f
          5-Port 10/100/1000 Gigabit Switch w/WebView
          172.18.0.1
          OTPRDSW01-RH
          OTPRDSW01-RH
          172.18.0.1
          172.18.0.1

          SPECTRUM
          172.18.0.1
          2
          255.255.252.0
          5
          Generic Router/Switch

          Yes

          Parece confuso mas nao é nada, é super simples.. pode perceber que cada tagzinha contem uma informação dentro, cada TAG seria uma coluna entende? as tags que nao tem informaçao dentro delas nao tem problema, sao apenas pq estao sem registro.. nesse caso eu tenho 2 registros no exemplo acima, pode ver que ele abre e fecha ci,ou seja essescript acima iria virar 2 registros na tabela entendeu??

          #97722
          fsitja
          Participante

            Então Maths, faça alguns testes com o exemplo abaixo por gentileza. Eu tive que incluir um no final do XML pois estava dando erro de parse nele, porque não havia sido fechada tag.

            Para inserir esses dados basta embutir esse SQL num INSERT .. SELECT,
            onde você pode manipular os dados normalmente como se estivessem numa tabela relacional, fazendo transformações, filtros de where, joins, etc.
            Se tiver alguma coisa com problema pode mandar.



            with xml_input as (
            select xmltype(
            '

            Network Interface Card

            0x10029f
            5-Port 10/100/1000 Gigabit Switch
            w/WebView
            172.18.0.1
            OTPRDSW01-link-100000
            OTPRDSW01-link-100000
            172.18.0.1
            172.18.0.1

            SPECTRUM
            172.18.0.1
            1

            5
            Generic Lan/Wan

            Yes

            Network Switch
            3C:DF:1E:F8:C8:F1
            0x10030f
            5-Port 10/100/1000 Gigabit Switch w/WebView
            172.18.0.1
            OTPRDSW01-RH
            OTPRDSW01-RH
            172.18.0.1
            172.18.0.1

            SPECTRUM
            172.18.0.1
            2
            255.255.252.0
            5
            Generic Router/Switch

            Yes

            ') xml_col from dual)
            -- fim dos dados de teste
            -- início da consulta aos dados do XML
            select xt.*
            from xml_input x,
            xmltable('/GRLoader/ci'
            passing x.xml_col
            columns class varchar2(4000) path 'class',
            mac_address varchar2(4000) path 'mac_address',
            federated_asset_id varchar2(4000) path 'federated_asset_id',
            description varchar2(4000) path 'description',
            alarm_id varchar2(4000) path 'alarm_id',
            name varchar2(4000) path 'name',
            system_name varchar2(4000) path 'system_name',
            ip_mgmt_addr varchar2(4000) path 'ip_mgmt_addr',
            network_address varchar2(4000) path 'network_address',
            gateway_id number(10) path 'gateway_id',
            subnet_mask varchar2(4000) path 'subnet_mask',
            number_ports number(10) path 'number_ports',
            technology varchar2(4000) path 'technology',
            host_name varchar2(4000) path 'host_name',
            role varchar2(4000) path 'role'
            ) xt;

            Segue a execução e o output:

            SQL> with xml_input as (
            2 select xmltype(
            3 '
            4
            5
            6 Network Interface Card
            7
            8 0x10029f
            9 5-Port 10/100/1000 Gigabit Switch
            10 w/WebView
            11 172.18.0.1
            12 OTPRDSW01-link-100000
            13 OTPRDSW01-link-100000
            14 172.18.0.1
            15 172.18.0.1
            16
            17 SPECTRUM
            18 172.18.0.1
            19 1
            20
            21 5
            22 Generic Lan/Wan
            23
            24 Yes
            25
            26
            27
            28 Network Switch
            29 3C:DF:1E:F8:C8:F1
            30 0x10030f
            31 5-Port 10/100/1000 Gigabit Switch w/WebView
            32 172.18.0.1
            33 OTPRDSW01-RH
            34 OTPRDSW01-RH
            35 172.18.0.1
            36 172.18.0.1
            37
            38 SPECTRUM
            39 172.18.0.1
            40 2
            41 255.255.252.0
            42 5
            43 Generic Router/Switch
            44
            45 Yes
            46
            47 ') xml_col from dual)
            48 -- fim dos dados de teste
            49 -- início da consulta aos dados do XML
            50 select xt.*
            51 from xml_input x,
            52 xmltable('/GRLoader/ci'
            53 passing x.xml_col
            54 columns class varchar2(4000) path 'class',
            55 mac_address varchar2(4000) path 'mac_address',
            56 federated_asset_id varchar2(4000) path 'federated_asset_id',
            57 description varchar2(4000) path 'description',
            58 alarm_id varchar2(4000) path 'alarm_id',
            59 name varchar2(4000) path 'name',
            60 system_name varchar2(4000) path 'system_name',
            61 ip_mgmt_addr varchar2(4000) path 'ip_mgmt_addr',
            62 network_address varchar2(4000) path 'network_address',
            63 gateway_id number(10) path 'gateway_id',
            64 subnet_mask varchar2(4000) path 'subnet_mask',
            65 number_ports number(10) path 'number_ports',
            66 technology varchar2(4000) path 'technology',
            67 host_name varchar2(4000) path 'host_name',
            68 role varchar2(4000) path 'role'
            69 ) xt;

            CLASS MAC_ADDRESS FEDERATED_ASSET_ID DESCRIPTION ALARM_ID NAME


            Network Interface Card 0x10029f 5-Port 10/100/1000 Gigabit Switch 172.18.0.1 OTPRDSW01-link-100000
            w/WebView

            Network Switch 3C:DF:1E:F8:C8:F1 0x10030f 5-Port 10/100/1000 Gigabit Switch w/WebView 172.18.0.1 OTPRDSW01-RH

            SQL>

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