- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 3 anos, 2 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
25 de agosto de 2021 às 2:31 pm #149219ElizaParticipante
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?
26 de agosto de 2021 às 3:39 pm #149240José Laurindo ChiappaModeradorTudo 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
26 de agosto de 2021 às 4:13 pm #149241José Laurindo ChiappaModeradornem preciso dizer que :
- 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….
- 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
>
; ou"
&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… - 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
- 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
27 de agosto de 2021 às 8:40 am #149248ElizaParticipanteBom 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 !!!!
28 de agosto de 2021 às 3:12 pm #149285José Laurindo ChiappaModeradorFico contente em ter ajudado e transmitido um conhecimento útil…
Abraços,
Chiappa
-
AutorPosts
- Você deve fazer login para responder a este tópico.