Sou iniciante em programação oracle, a versão que uso atualmente é a 11g.
Eu tenho uma procedure que precisa fazer o upload de uma imagem de um diretório, eu coloca o caminho em uma variável, porém, quando chego na função bfilename, a variavel recebe uma barra "/" e isso da erro na leitura da imagem. Eu não sei porque ele faz isso. Peguei vários casos de vários foruns, inclusive desse mas não consigo implementar essa rotina. Gostaria muito da ajuda de vocês.
Segue meu código abaixo.
CREATE OR REPLACE PROCEDURE p_grava_assinatura_gestor AS
---------------------------------------------------------
-- Crio o Cursor dos Nomes dos Arquivos JPG. --
---------------------------------------------------------
CURSOR cursor_nome_arquivo IS
SELECT p.id, (p.empresa || '_' || p.chapa || '.JPG') AS noarq
FROM pes p
INNER JOIN emp e
ON p.id = e.id
AND e.dt_fim_exercicio IS NULL
WHERE p.demissao IS NULL;
---------------------------------------------------------
arquivo utl_file.file_type;
nome_arq VARCHAR2(100);
flagencontrou INT := 0;
local_arq varchar2(4000) := 'e:\directory\ftp_oracle\Assinaturas';
v_bfile bfile;
v_blob blob;
---------------------------------------------------------
BEGIN
------------------------------------------------------
-- Cursor para Carga dos Arquivos JPG --
------------------------------------------------------
for reg_dados in cursor_nome_arquivo loop
------------------------------------------------------
-- Variável iniciação --
------------------------------------------------------
flagencontrou := 1;
------------------------------------------------------
-- Verifica se o Arquivo Existe no Local Indicado --
------------------------------------------------------
begin
arquivo := utl_file.fopen(local_arq, reg_dados.noarq, 'r');
exception
when others then
begin
flagencontrou := 0;
end;
end;
------------------------------------------------------
if (flagencontrou = 1) then
utl_file.fclose_all;
-- Vabiable Value
v_bfile := bfilename(local_arq, reg_dados.noarq); e:\sistemas\ftp_oracle\Assinaturas/001_10626.JPG
--dbms_lob.fileopen(v_bfile, dbms_lob.file_readonly);
--dbms_lob.loadfromfile(v_blob,v_bfile,dbms_lob.getlength(v_bfile));
--
insert into gestor_assina g
(g.id, g.assinatura)
values
(reg_dados.id, v_blob)
returning g.assinatura into v_blob;
dbms_lob.fileopen(v_bfile, dbms_lob.file_readonly);
dbms_lob.loadfromfile(dest_lob => v_blob,
src_lob => v_bfile,
amount => dbms_lob.getlength(v_bfile));
commit;
--
dbms_lob.fileclose(v_bfile);
end if;
------------------------------------------------------
end loop;
/*exception
when utl_file.invalid_mode then
raise_application_error(-20000,'Erro invalid_mode.');
-- O modo para abertura do arquivo é invalido
when utl_file.invalid_path then
raise_application_error(-20000,'Erro invalid_path.');
-- O caminho é invalido
when utl_file.invalid_filehandle then
raise_application_error(-20000,'Erro invalid_filehandle.');
-- O handle do arquivo é invalido
when utl_file.invalid_operation then
raise_application_error(-20000,'Erro invalid_operation.');
-- O arquivo não pode ser aberto ou trabalhado como requisitado
when utl_file.read_error then
raise_application_error(-20000,'Erro read_error.');
-- Ocorreu um erro de sistema operacional durante a leitura do arquivo
when others then
raise_application_error(-20000, 'Erro ' || sqlcode || '-' || substr(sqlerrm,1,100));
*/
end p_grava_assinatura_gestor;
Até mais.