Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como salvar BLOB como arquivo em PL/SQL?


Aqui estou dando um exemplo para salvar dados BLOB como um arquivo em PL/SQL. Dados BLOB você pode obtê-los da tabela com a coluna BLOB, ou você pode obtê-los de um arquivo no disco.

Exemplo de função PL/SQL para salvar BLOB como um arquivo


O procedimento abaixo recebe os três argumentos a seguir:
  1. Nome do objeto de diretório Oracle (como i_dir).
  2. Salvar como nome de arquivo (como i_file).
  3. Dados BLOB (como i_blob).
CREATE OR REPLACE PROCEDURE blob_to_file (i_dir    IN VARCHAR2,
                                          i_file   IN VARCHAR2,
                                          i_blob   IN BLOB)
AS
   l_file       UTL_FILE.file_type;
   l_buffer     RAW (32767);
   l_amount     BINARY_INTEGER := 32767;
   l_pos        INTEGER := 1;
   l_blob_len   INTEGER;
BEGIN
   l_blob_len := DBMS_LOB.getlength (i_blob);

   l_file :=
      UTL_FILE.fopen (i_dir,
                      i_file,
                      'WB',
                      32767);

   WHILE l_pos < l_blob_len
   LOOP
      DBMS_LOB.read (i_blob,
                     l_amount,
                     l_pos,
                     l_buffer);
      UTL_FILE.put_raw (l_file, l_buffer, TRUE);
      l_pos := l_pos + l_amount;
   END LOOP;

   UTL_FILE.fclose (l_file);
EXCEPTION
   WHEN OTHERS
   THEN
      IF UTL_FILE.is_open (l_file)
      THEN
         UTL_FILE.fclose (l_file);
      END IF;

      RAISE;
END blob_to_file;

Teste


O bloco PL/SQL a seguir chamará o procedimento acima passando o objeto do diretório Oracle, o nome do arquivo e os dados BLOB. Para os dados BLOB, estou usando a função GET_BLOB para a qual dei um exemplo na postagem anterior do blog:Obter BLOB de um arquivo em PL/SQL. No caso abaixo, ele obterá os dados BLOB de um arquivo myfile.jpg do local MY_DIR e o salvará no arquivo abc.jpg no local IMG_DIR.
DECLARE
   f_blob   BLOB;
BEGIN
   /* check the above mentioned link for get_blob function example */
   f_blob := get_blob ('MY_DIR', 'myfile.jpg');
   /* now pass the blob to blob_to_file procedure to save it as a file */
   blob_to_file ('IMG_DIR', 'abc.jpg', f_blob);
END;

Agora você pode verificar a localização do diretório IMG_DIR para o arquivo criado através do BLOB.

Veja também:

  • Como criar um objeto de diretório Oracle?
  • Saiba como extrair dados BLOB da Oracle Table usando o Toad