utl_file.get_line com mais de 3276.

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
carloscsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qui, 26 Jul 2012 8:55 am
" Pense diferente! - "

Boa tarde, pessoal!

Estou usanto o utl_file.get_line para ler um arquivo .xml, mas o mesmo esta estourando. Alguém conhece outro processo para ler um arquivo XML para resolver esse problema?

At.:
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Bom dia amigo.

Apesar de não conhecer muito sobre o assunto (XML - Oracle), sei que existem bibliotecas específicas para trabalhar com esse formato de arquivo.

Dá uma olhada nos seguintes sites e vê se pode lhe ajudar:



http://byclaudio.wordpress.com/2012/03/ ... no-oracle/

http://eduardoarruda.wordpress.com/2009 ... as-oracle/

http://www.oracle.com/pls/db112/search? ... h&word=xml



Qualquer coisa, via postando ai para ver se algum parceiro aqui do fórum consegue lhe ajudar esclarecer suas dúvidas.

Abç.,
carloscsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qui, 26 Jul 2012 8:55 am
" Pense diferente! - "

Valeu, tinho! Era isso mesmo ... segue o Código abaixo, caso alguém precise de algum exemplo.

Selecionar tudo

create or replace procedure prc_grava_xml(i_nom_diretorio in varchar2,
                                          i_nom_arquivo   in varchar2,
                                          io_errcode      in out number,
                                          io_errmsg       in out varchar2) is
     w_arquivo          Bfile;
     w_conteudo      CLOB;
     w_xml               clob;
     w_error            exception;
begin
    -- verifica se o ditorio foi informado...
    if i_nom_diretorio is null then
       io_errcode:= 100;
       io_errmsg:= 'Não possui diretorio informado!';
      raise w_error;
    end if;
    -- verifica se o arquivo foi informado...
    if i_nom_arquivo is null then
       io_errcode:= 100;
       io_errmsg:= 'Não esta informado o nome do arquivo!';
      raise w_error;
    end if;
    
    -- cria ou replica o diretorio
    w_arquivo := bfilename(i_nom_diretorio,i_nom_arquivo);
    -- O procedimento FileOpen abre a BFILE para acesso somente leitura ...
    DBMS_LOB.fileOpen(w_arquivo,dbms_lob.file_readonly);
    -- cria um temporário BLOB ou CLOB e seu índice correspondente no seu tablespace temporário padrão ...
    DBMS_LOB.createtemporary(w_conteudo,TRUE,DBMS_LOB.session);
    -- Este procedimento copia a totalidade ou uma parte de, um LOB fonte externa (BFILE) para um destino LOB interno ..
    DBMS_LOB.loadFromFile(w_conteudo,w_arquivo,DBMS_LOB.getLength(w_arquivo),1,1);
    -- Este procedimento fecha um BFILE que já foi aberto através do localizador de entrada.
    DBMS_LOB.fileClose(w_arquivo);
                         -- Função estática para criar e retornar um XMLType exemplo.
    w_xml := w_conteudo; -- XMLType.createxml(w_conteudo);
    
    begin
        insert into xml_confirmation(xml_con_codigo,xml_con_dados) values(seq_xml_confirmation.nextval,w_xml);
        commit;
      exception
          when others then
            io_errcode:= sqlcode;
            io_errmsg:= 'Erro ao gerar insert na prc_grava_xml';
    end;
    
  exception
     when w_error then
        io_errcode:= io_errcode;
        io_errmsg := io_errmsg;
     when others then
        null;
end;
Responder
  • Informação