sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo comprimir un archivo en PL/SQL?

En esta publicación de blog, doy un ejemplo para comprimir un archivo en PL/SQL. Estoy usando Alexandria PL/SQL Util Library para realizar esta tarea. La misma biblioteca que utilicé para el ejemplo de exportación de datos a Excel desde la tabla de Oracle Database. Siga estos pasos para crear un archivo ZIP utilizando PL/SQL en Oracle.

Cree un archivo ZIP en Oracle utilizando PL/SQL

  1. Primero, descargue la biblioteca Alexandria PL/SQL de Github usando el siguiente enlace Descargar.
  2. Después de descargar el archivo, extráigalo y localice zip_util_pkg.pks y zip_util_pkg.pkb archivos en \alexandria-plsql-utils-master\ora\ directorio y ejecute estos scripts en su esquema de base de datos Oracle para instalarlo.
  3. Si se necesitan objetos compatibles, búsquelos en la carpeta \alexandria-plsql-utils-master\ e instálelos.
  4. Ha instalado el paquete de utilidades y los objetos relacionados. Ahora cree un objeto de directorio en su esquema, como se muestra en el siguiente ejemplo.
Create OR Replace Directory zip_files as 'c:\zip_files';
  1. Luego, cree la siguiente función en el mismo esquema para convertir un archivo en un BLOB. Esta función se usará para crear un archivo Zip usando el paquete PL/SQL zip_util_pkg. Tenga en cuenta también, que antes de crear esta función cambie los ZIP_FILES nombre del directorio con el objeto del directorio de la base de datos que creó anteriormente.
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;
/

Prueba

Nota: En el siguiente ejemplo, el archivo emp.dat debe existir en el directorio ZIP_FILES que creamos anteriormente.

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;
/

Ahora puede verificar la ubicación del directorio ZIP_FILES para el archivo plsql_1.zip.

Para comprimir varios archivos

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;
/

Ver también:

  • Descomprimir un archivo en PL/SQL
  • Crear archivo JSON en Oracle 11g usando PL/SQL
  • Exportar datos de Oracle SQL Developer a Excel
  • Crear archivos PDF utilizando PL/SQL