14 de abril de 2025

Lendo um arquivo XML e importando os dados para uma tabela do Banco de Dados de uma aplicação APEX


Suponha que tenha um arquivo XML com as informações da declaração de IRPF de um contribuinte e você queira importar tais informações para dentro de uma tabela do banco de dados de sua aplicação Oralce APEX.

Vamos fazer isso criando um formulário APEX completo com upload do XML, leitura do conteúdo e inserção automática na tabela. 

Abaixo está um passo a passo prático para construir isso no APEX 24.2:


Passo 1 – Criar a Tabela de Destino

No SQL Workshop > SQL Commands, execute:

sql
CREATE TABLE xml_irpf_2023 ( sistema VARCHAR2(20), exercicio NUMBER, ano_base NUMBER, codigo_recnet VARCHAR2(10), in_retificadora NUMBER, nr_cpf VARCHAR2(11), tipo_ni NUMBER, nr_versao NUMBER, nm_nome VARCHAR2(100), sg_uf VARCHAR2(2), nr_hash NUMBER, in_certificavel NUMBER, dt_nascim VARCHAR2(8), in_completa VARCHAR2(1), in_resultado_imposto NUMBER, in_gerada VARCHAR2(1), nr_recibo_ultima_dec VARCHAR2(20), nome_so VARCHAR2(100), versao_so VARCHAR2(20), versao_jvm VARCHAR2(20), cd_municip VARCHAR2(10), nr_conj VARCHAR2(20), in_obrigat_entrega NUMBER, vr_impdevido VARCHAR2(20), nr_recibo_ult_dec_ant VARCHAR2(20), in_seguranca NUMBER, in_imposto_pago VARCHAR2(2), in_imposto_antecipado NUMBER, in_muda_endereco NUMBER, nr_cep VARCHAR2(8), in_debito_primeira_quota NUMBER, nr_banco VARCHAR2(5), nr_agencia VARCHAR2(10), data_transito_julgado VARCHAR2(8), vr_soma_imposto_pagar VARCHAR2(20) );

Passo 2 – Criar Página de Upload de Arquivo

  1. Vá para o App Builder > Seu App.

  2. Criar Página > Formulário > Formulário de Arquivo.

  3. Nomeie como: Upload XML IRPF.

  4. O item gerado será algo como PXX_FILE (anote isso).

Configure:

  • Tabela de destino: apex_application_temp_files

  • Nome de Arquivo: ative a opção de "Mostrar nome"


Passo 3 – Criar Processo para Ler e Inserir os Dados

Adicione um Processo do tipo PL/SQL depois do envio, com o seguinte código:

plsql
DECLARE l_xml XMLTYPE; l_blob BLOB; l_clob CLOB; BEGIN -- Obtem o conteúdo do arquivo SELECT blob_content INTO l_blob FROM apex_application_temp_files WHERE name = :PXX_FILE; -- Converte BLOB para CLOB l_clob := apex_web_service.blob2clobbase64(l_blob); l_xml := XMLTYPE(utl_encode.text_decode(utl_encode.base64_decode
(utl_raw.cast_to_raw(l_clob)), 'AL32UTF8')); -- Insere os dados INSERT INTO xml_irpf_2023 ( sistema, exercicio, ano_base, codigo_recnet, in_retificadora, nr_cpf, tipo_ni, nr_versao, nm_nome, sg_uf, nr_hash, in_certificavel, dt_nascim, in_completa, in_resultado_imposto, in_gerada, nr_recibo_ultima_dec, nome_so, versao_so, versao_jvm, cd_municip, nr_conj, in_obrigat_entrega, vr_impdevido, nr_recibo_ult_dec_ant, in_seguranca, in_imposto_pago, in_imposto_antecipado, in_muda_endereco, nr_cep, in_debito_primeira_quota, nr_banco, nr_agencia, data_transito_julgado, vr_soma_imposto_pagar ) SELECT extractvalue(l_xml, '//SISTEMA'), extractvalue(l_xml, '//EXERCICIO'), extractvalue(l_xml, '//ANO_BASE'), extractvalue(l_xml, '//CODIGO_RECNET'), extractvalue(l_xml, '//IN_RETIFICADORA'), extractvalue(l_xml, '//NR_CPF'), extractvalue(l_xml, '//TIPO_NI'), extractvalue(l_xml, '//NR_VERSAO'), extractvalue(l_xml, '//NM_NOME'), extractvalue(l_xml, '//SG_UF'), extractvalue(l_xml, '//NR_HASH'), extractvalue(l_xml, '//IN_CERTIFICAVEL'), extractvalue(l_xml, '//DT_NASCIM'), extractvalue(l_xml, '//IN_COMPLETA'), extractvalue(l_xml, '//IN_RESULTADO_IMPOSTO'), extractvalue(l_xml, '//IN_GERADA'), extractvalue(l_xml, '//NR_RECIBO_ULTIMA_DEC_EX_ATUAL'), extractvalue(l_xml, '//nome_SO'), extractvalue(l_xml, '//VERSAO_SO'), extractvalue(l_xml, '//VERSAO_JVM'), extractvalue(l_xml, '//CD_MUNICIP'), extractvalue(l_xml, '//NR_CONJ'), extractvalue(l_xml, '//IN_OBRIGAT_ENTREGA'), extractvalue(l_xml, '//VR_IMPDEVIDO'), extractvalue(l_xml, '//NR_RECIBO_ULTIMA_DEC_EX_ANTERIOR'), extractvalue(l_xml, '//IN_SEGURANCA'), extractvalue(l_xml, '//IN_IMPOSTO_PAGO'), extractvalue(l_xml, '//IN_IMPOSTO_ANTECIPADO'), extractvalue(l_xml, '//IN_MUDA_ENDERECO'), extractvalue(l_xml, '//NR_CEP'), extractvalue(l_xml, '//IN_DEBITO_PRIMEIRA_QUOTA'), extractvalue(l_xml, '//NR_BANCO'), extractvalue(l_xml, '//NR_AGENCIA'), extractvalue(l_xml, '//DATA_TRANSITO_JULGADO_LAVRATURA'), extractvalue(l_xml, '//VR_SOMA_IMPOSTO_PAGAR') FROM dual; -- Limpa o arquivo DELETE FROM apex_application_temp_files WHERE name = :PXX_FILE; END;

📌 Importante:

  • Substitua :PXX_FILE pelo nome real do item gerado no upload (ex: :P5_FILE_XML).

  • Valide se a página está com Processamento Automático de Arquivo habilitado.


Passo 4 – Testar e Visualizar os Dados

  1. Execute a página.

  2. Faça upload do seu XML.

  3. Após o envio, os dados estarão na tabela XML_IRPF_2023.

Você pode agora criar:

  • Relatório interativo com base nessa tabela.

  • Processos de validação.

  • Exportação para Excel ou PDF.


 

Nenhum comentário:

Postar um comentário