O arquivo está armazenado em um campo BLOB no banco de dados.
PROCEDURE DOWNLOAD_ARQUIVO IS
lstr_nomeArquivo VARCHAR2(4000);
BEGIN
IF :ARQUIVO.ID IS NULL THEN
alerta('Selecione o arquivo!');
RETURN ;
END IF;
-- ----------------------------------------------------------------------------------------------------
-- Abre a caixa de dialogo para o usuário escolher o nome e local onde o arquivo será armazenado
-- ----------------------------------------------------------------------------------------------------
lstr_nomeArquivo := client_get_file_name(directory_name => 'C:',
file_name => :ARQUIVO.NOME_ARQUIVO,
file_filter => 'ALL Files (*.*)|*.*|',
message => 'Escolha o arquivo',
dialog_type => SAVE_FILE,
select_file => NULL
);
-- ----------------------------------------------------------------------------------------------------
-- Sai caso o usuário não tenha selecionado local e nome do arquivo.
-- ----------------------------------------------------------------------------------------------------
IF lstr_nomeArquivo IS NULL THEN
RETURN ;
END IF;
-- ----------------------------------------------------------------------------------------------------
-- Coleta o arquivo do banco de dados e transfere para a máquina do usuário.
-- ----------------------------------------------------------------------------------------------------
IF NOT webutil_file_transfer.DB_To_Client(clientFile => lstr_nomeArquivo,
tableName => 'ARQUIVO',
columnName => 'ARQUIVO',
whereClause => 'ID = ' || TO_CHAR(:ARQUIVO.ID)
) THEN
alerta('Ocorreu um erro durante o download!');
RETURN ;
END IF;
alerta('O download foi efetuado com sucesso!');
EXCEPTION
WHEN OTHERS THEN
alerta('Ocorreu um erro durante o processo: ' || sqlerrm);
END;