Pular para o conteúdo
  • Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 13 anos atrás por rman.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #105134
    Raphael Fernandes
    Participante

      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.

      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.

      #105154
      Raphael Fernandes
      Participante

        Ninguém???

        #105155
        rman
        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);

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.