› Fóruns › SQL e PL/SQL › comando XMLTABLE › Responder a: comando XMLTABLE
26 de agosto de 2021 às 4:13 pm
#149241
Moderador
nem 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