- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 13 anos atrás por
rman.
-
AutorPosts
-
6 de março de 2013 às 8:43 pm #105134
Raphael Fernandes
ParticipanteOlá a todos.
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:directoryftp_oracleAssinaturas';
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:sistemasftp_oracleAssinaturas/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;
Obrigado a todos pela atenção.
8 de março de 2013 às 3:59 am #105154Raphael Fernandes
ParticipanteNinguém???
8 de março de 2013 às 3:18 pm #105155rman
Participante@hishin
Pelo que li na documentação oficial a função BFILENAME recebe dois argumentos DIRECTORY e FILENAME, no caso o DIRECTORY deve ser um objeto DIRECTORY do Oracle e não um VARCHAR com o path como utilizado na procedure.
Crie o DIRECTORY e dê as permissões
CREATE DIRECTORY ASSINATURA_DIR AS 'e:directoryftp_oracleAssinaturas';
Use da seguinte forma:
v_bfile := bfilename('ASSINATURA_DIR', reg_dados.noarq);
-
AutorPosts
- Você deve fazer login para responder a este tópico.