dbms_lob.read - preciso gerar pdf tamanho > 32767 help

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
MARISTELAFALCO
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Seg, 17 Mar 2008 2:31 pm
Localização: MARINGA-PR

ao executar a instruçao abaixo :

Selecionar tudo

  dbms_lob.read(va_pdf, va_tamanho_limite, va_posicao_pdf,   
                                                                            va_tamanho);
  utl_file.put_raw(va_end, va_tamanho, TRUE);
   utl_file.fflush(va_end);
da erro:

Selecionar tudo

   ORU-10028: line length overflow, limit of 32767 bytes per line

    va_pdf                             blob;  (arquivo pdf)
    va_tamanho                     RAW(32767);
    va_tamanho_pdf               INTEGER;
    va_tamanho_limite            BINARY_INTEGER := 32767;
    va_posicao_pdf                 INTEGER:=1;
tipos raw e BINARY_INTEGER são limitados a 32767,
enquanto meu va_tamanho fica < 37000 beleza, mas passou da erro.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você não consegue fazer um LOOP e ir pegando de pedaço em pedaço o arquivo ?
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP

dr_gori estou tendo a mesma dificuldade que a nossa amiga MARISTELAFALCO relatou.

como faço para abrir o arquivo de "pedaço" em "pedaço"???

Grato
Eduardo Gomes
joaogarcia
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 91
Registrado em: Ter, 20 Mar 2007 7:19 pm
Localização: Campinas - SP
Contato:
Cordialmente,
João C. Garcia

Amigo, de uma analisada neste trecho..


Selecionar tudo

BEGIN
     /*
   vFile          utl_file.file_type;
    vBuffer     RAW(32767);
    vAmount   BINARY_INTEGER := 32767;
    vPosicao   INTEGER := 1;
    vBlob        BLOB;
    vTamanho   INTEGER;    
     */ 

     -- Obtem tamanho do BLOB
      vTamanho := dbms_lob.getlength(vBlob);
      -- Abre arquivo destino
      vFile := utl_file.fopen(vDirBD, vNomeArq, 'W', 32767);
      -- Grava o BLOB no arquivo em blocos
      WHILE vPosicao < vTamanho LOOP
        --
        IF vPosicao + vAmount > vTamanho THEN
          vAmount := (vTamanho + 1) - vPosicao;
        END IF;
        --
        dbms_lob.read(vBlob, vAmount, vPosicao, vBuffer);
        utl_file.put_raw(vFile, vBuffer, TRUE);
        vPosicao := vPosicao + vAmount;
        --
      END LOOP;
      --
    EXCEPTION
      WHEN OTHERS THEN
        vRetorno := 'ERRO ao executar comandos dbms_lob: ' || SQLERRM;
        RAISE vErro;
    END;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante