SYSTEMTI.NET

Please or Cadastrar to create posts and topics.

Função conversão BLOB que contém XML para varchar

Olá, pessoal. Compartilhar com vocês uma função que utilizei e que me ajudou muito em uma demanda interna para levantar os pedidos com erros, e para isso precisava extrair dentro de um campo do tipo BLOB que contém XML o código de um pedido. Deixo abaixo exemplo de campo BlOB que comtém XML.

Inicialmente tentei utilizar a função dbms_lob.substr, porém não obtive sucesso, pois como o dado era em XML o retorno veio sem conversão. Essa função atenderia caso não estivesse XML dentro do campo. Abaixo deixo exemplo do uso da função. Para saber mais, deixo o link sobre essa função.

https://systemti.net/forum/topic/funcao-conversao-lob-para-varchar/

Após mais alguns testes e pesquisas, acabei descobrindo a função utl_raw.cast_to_varchar2, onde é convertido XML em varchar. Deixo abaixo sintaxe da função e resultado da sua execução.

SINTAXE FUNÇÃO UTL
utl_raw.cast_to_varchar2(campo)

RESULTADO
utl_raw.cast_to_varchar2(dbms_lob.substr(CAMPO, 2000, 1))

Tive também que utilizar a função dbms_lob para selecionar apenas a parte que me interessava.

Por fim, utilizei a função SUBSTR junto com INSTR para extrair exatamente a parte que me interessava. Abaixo deixo código e resultado final.

SUBSTR(
utl_raw.cast_to_varchar2(dbms_lob.substr(m.lo_mensagem, 2000, 1)),
INSTR(utl_raw.cast_to_varchar2(dbms_lob.substr(m.lo_mensagem, 2000, 1)),'<codigoPedido>')+14,
(INSTR(utl_raw.cast_to_varchar2(dbms_lob.substr(m.lo_mensagem, 2000, 1)),'</codigoPedido>')-
INSTR(utl_raw.cast_to_varchar2(dbms_lob.substr(m.lo_mensagem, 2000, 1)),'<codigoPedido>'))-14
) PEDIDO

 

Deixo abaixo links que me ajudaram na atividade.

https://docs.oracle.com/database/121/ARPLS/u_raw.htm#ARPLS71386

https://stackoverflow.com/questions/828650/how-do-i-get-textual-contents-from-blob-in-oracle-sql

https://stackoverflow.com/questions/58001426/oracle-convert-blob-to-string

 

Espero que lhe seja útil.

Se você deseja apoiar o desenvolvimento do SYSTEMTI.NET, você pode compartilhar algum conteúdo no fórum ou doar. Muito obrigado !