Pular para o conteúdo
  • Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 2 anos, 8 meses atrás por Avatar de José Laurindo ChiappaJosé Laurindo Chiappa.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #149219
    Avatar de ElizaEliza
    Participante

      Boa tarde,

      Eu nunca usei este comando

      XMLTABLE( XMLNAMESPACES(default ‘http://www.portalfiscal.inf.br/cte’) ,
      ‘/cteProc/CTe/infCte/infCTeNorm/infDoc/infNFe’
      PASSING XMLTYPE(X.XML)  COLUMNS CHAVENFE VARCHAR2(50) PATH ‘chave’ )

      Como ele funciona?

      #149240
      Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
      Moderador

        Tudo bem ? Então, a função XMLTABLE foi introduzida lá atrás, no Oracle 10g, serve para Transformar logicamente uma fonte de dados XML (que pode ser uma URL de internet, um arquivo, ou uma string mesmo) em uma organiação similar ás tabelas relacionais Oracle, com Linhas e Colunas : vide https://www.ateam-oracle.com/using-xmltable-and-xmltype-to-extract-html-clob-data , https://oracle-base.com/articles/misc/xmltable-convert-xml-data-into-rows-and-columns-using-sql , https://www.educba.com/oracle-xmltable/ e https://www.viralpatel.net/oracle-xmltable-tutorial/ para alguns exemplos…

        Sobre o funcionamento, é bem básico : a função vai interpretar CADA elemento no XML como uma Coluna, e cada uma das N ocorrências dos elementos como Linhas da ‘TABELA’ que será criada…. Essa ‘tabela virtual’ que será criada em memória PODE , então, ser fonte de uma consulta via SELECT, da mesma forma que as tabelas ‘reais’, ‘físicas’ do banco….

         

        Abraços,

        José Laurindo Chiappa

        #149241
        Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
        Moderador

          nem preciso dizer que :

          1. pra coisa funcionar Direito, o XML *** TEM *** que ser bem-formado : digamos que eu tenho uma estrutura XML chamada EMPLOYEES, composta pelos elementos EMPNO, ENAME, JOB e HIREDATE, os dados DEVERIAM estar no formato :

          <employees>
          <employee empno=”7369″ ename=”SMITH” job=”CLERK” hiredate=”17-DEC-1980″/>
          <employee empno=”7499″ ename=”ALLEN” job=”SALESMAN” hiredate=”20-FEB-1981″/>
          <employee empno=”7521″ ename=”WARD” job=”SALESMAN” hiredate=”22-FEB-1981″/>
          </employees>

          Tá vendo os fechos de TAGs com ‘/’ ??? Todos presentes, elementos citados SEMPRE na mesma ordem ?? ISSO é um XML bem formado – SE a fonte de origem do seu XML *** não for *** assim bem estruturada, é Muito Muito Provável que a XMLTABLE (e as N outras funções do database Oracle que tratam de XML) vão Falhar….

          1. diversos caracteres (como maiorque, menorque, aspas-simples, apóstrofos, “&”, etc) SÃO interpretados de maneira diferente pelo PL/SQL e/ou pela linguagem SQL (OU mesmo pela tool de front-end Oracle, por exemplo o sqlplus, que usa & para indicar variáveis de substituição), então Preferencialmente teu XML ** deveria ** estar usando a versão Codificada deles, tipo &gt; ou &quot; &apos, etc, etc…. EVENTUALMENTE vc pode usar built-ins Oracle como DBMS_XMLGEN.CONVERT pra fazer esse tipode conversão, mas MUITO MELHOR SERIA se teu XML já viesse OK…
          2. formatada em XML ou não, as Strings no database Oracle CONTINUAM a ter as mesmas limitações de sempre, atenção à isso : muitas vezes (DEPENDENDO da sua exata versão de Oracle), pra contornar essas limitações, se deve usar LOB ao invés de strings, ou talvez ativar o Suporte pra strings de 32 KB no database, algo no estilo
          3. outro ponto CRUCIAL quando falamos de STRINGs no Oracle é a questão de CHARACTERSET : ao contrário de outros SGBDs, no Oracle o characterset que VAI ser usado para se gravar uma string É o characterset definido na Criação do database, e qualquer que seja o characterset na origem dos dados, ele VAI ser convertido pro characterset do banco… Isso te dá a FLEXIBILIDADE de várias sessões diferentes em máquinas/regiões/linguagens diferentes poderem TODAS gravar strings no mesmo database sem necessidade de config alguma EM ESPECIAL se o banco usar UNICODE, como é a recomendação da Oracle), mas a Conversibilidade tem que ser levada em conta….

          Abraços,

          Chiappa

          #149248
          Avatar de ElizaEliza
          Participante

            Bom dia  José Laurindo Chiappa,

            Que interessante é esse comando!!

            Ótima explicação!!

            Eu quero agradecer por vc sempre responder com tanto zelo e conhecimento  às questões do grupo.

            Obrigada !!!!

             

            #149285
            Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
            Moderador

              Fico contente em ter ajudado e transmitido um conhecimento útil…

              Abraços,

               

              Chiappa

               

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