Erro no dbms_lob

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
hishin
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qua, 06 Mar 2013 9:06 am

Olá 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.

Selecionar tudo

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;
Obrigado a todos pela atenção.

Até mais.
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 319
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Não sei se você já fez isso. Mas experimente criar um diretório pelo Oracle:

http://docs.oracle.com/cd/B19306_01/se ... _path.php

Vê se lhe ajuda, qualquer coisa posta ai.

Abç.,
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes