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