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

Como ZIP um arquivo em PL/SQL?


Neste post do blog, estou dando um exemplo para ZIP um arquivo em PL/SQL. Estou usando Alexandria PL/SQL Util Library para executar esta tarefa. A mesma biblioteca que usei para o exemplo de exportação de dados para Excel da tabela Oracle Database. Siga estas etapas para criar um arquivo ZIP usando PL/SQL no Oracle.

Criar um arquivo ZIP no Oracle usando PL/SQL

  1. Primeiro, baixe a biblioteca Alexandria PL/SQL do Github usando o seguinte link Download.
  2. Depois de baixar o arquivo, extraia-o e localize os arquivos zip_util_pkg.pks e zip_util_pkg.pkb arquivos em \alexandria-plsql-utils-master\ora\ e execute esses scripts em seu Oracle Database Schema para instalá-lo.
  3. Se algum objeto compatível for necessário, encontre na pasta \alexandria-plsql-utils-master\ e instale-o.
  4. Você instalou o pacote de utilitários e objetos relacionados. Agora crie um objeto de diretório em seu esquema, conforme mostrado no exemplo abaixo.
Create OR Replace Directory zip_files as 'c:\zip_files';
  1. Em seguida, crie a função abaixo no mesmo Schema para converter um arquivo em um BLOB. Esta função será usada para criar um arquivo Zip usando o pacote PL/SQL zip_util_pkg. Observe também, que antes de criar esta função altere o ZIP_FILES nome do diretório com seu objeto de diretório de banco de dados que você criou acima.
CREATE OR REPLACE FUNCTION file_to_blob (p_file_name VARCHAR2)
RETURN BLOB
AS
dest_loc BLOB := EMPTY_BLOB ();
src_loc BFILE := BFILENAME ('ZIP_FILES', p_file_name);
BEGIN
DBMS_LOB.OPEN (src_loc, DBMS_LOB.LOB_READONLY);

DBMS_LOB.CREATETEMPORARY (lob_loc => dest_loc,
cache => TRUE,
dur => DBMS_LOB.session);

DBMS_LOB.OPEN (dest_loc, DBMS_LOB.LOB_READWRITE);

DBMS_LOB.LOADFROMFILE (dest_lob => dest_loc,
src_lob => src_loc,
amount => DBMS_LOB.getLength (src_loc));

DBMS_LOB.CLOSE (dest_loc);
DBMS_LOB.CLOSE (src_loc);

RETURN dest_loc;
END file_to_blob;
/

Teste


Observação: No exemplo a seguir, o arquivo emp.dat deve existir no diretório ZIP_FILES que criamos acima.
DECLARE
l_file1 BLOB;
l_zip BLOB;
BEGIN

/* emp.dat should be in ZIP_FILES directory location */
l_file1 := file_to_blob ('emp.dat');

zip_util_pkg.add_file (l_zip, 'emp.dat', l_file1);

zip_util_pkg.finish_zip (l_zip);

/* it will create the zip file named plsql_1.zip in the ZIP_FILES directory */

zip_util_pkg.save_zip (l_zip, 'ZIP_FILES', 'plsql_1.zip');
END;
/

Agora você pode verificar a localização do diretório ZIP_FILES para o arquivo plsql_1.zip.


Para compactar vários arquivos

DECLARE
l_file1 BLOB;
l_file2 BLOB;
l_zip BLOB;
BEGIN
l_file1 := file_to_blob ('emp.dat');
l_file2 := file_to_blob ('scott.sql');

zip_util_pkg.add_file (l_zip, 'emp.dat', l_file1);
zip_util_pkg.add_file (l_zip, 'scott.sql', l_file2);

zip_util_pkg.finish_zip (l_zip);

zip_util_pkg.save_zip (l_zip, 'ZIP_FILES', 'plsql_3.zip');
END;
/

Veja também:

  • Descompacte um arquivo em PL/SQL
  • Criar arquivo JSON no Oracle 11g usando PL/SQL
  • Exportar dados do Oracle SQL Developer para o Excel
  • Criar arquivos PDF usando PL/SQL