Pular para o conteúdo
  • Este tópico contém 0 resposta, 1 voz e foi atualizado pela última vez 16 anos atrás por airoosp.
Visualizando 1 post (de 1 do total)
  • Autor
    Posts
  • #93009
    airoosp
    Participante

      Boa tarde,

      Preciso enviar arquivos PDF anexo ao e-mail enviado pelo banco, uma das alternativas foi armazenar o conteúdo do arquivo PDF em uma tabela do banco usando campo blob.
      Pesquisando na internet encontrei alguns exemplos e consegui gravar o registro.
      O problema é que não estou conseguindo executar a rotina abaixo para ler o campo da tabela e gerar o arquivo PDF em disco.
      Esta rotina também encontrei na internet.

      create or replace procedure teste_pdf (v_seq in number)
      is

      vRetorno varchar2(100);
      vNomeArq varchar2(255);
      vBlob BLOB;
      vTamanho INTEGER;
      vPosicao INTEGER := 1;
      vFile utl_file.file_type;
      vBuffer RAW(32767);
      vAmount BINARY_INTEGER := 32767;

      BEGIN

      –obtém o localizador de LOB do BLOB

      select BLOB_ARQ, Nom_Arquivo into vBlob, vNomeArq
      from TableBfile
      where C_Chave =v_seq;

      — Obtem tamanho do BLOB
      vTamanho := dbms_lob.getlength(vBlob);

      — Abre arquivo destino
      vFile := utl_file.fopen(‘ARQUIVO_PDF’, 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 teste_pdf;

      O arquivo é gerado em disco mas sem conteúdo, alguém já desenvolveu alguma rotina para trabalhar com arquivo PDF. Será que falta algum parâmetro no utl_file.put_raw ?

      Obrigado.

      Airton

    Visualizando 1 post (de 1 do total)
    • Você deve fazer login para responder a este tópico.