Oracle
 sql >> Database >  >> RDS >> Oracle

Come ZIP un file in PL/SQL?

In questo post del blog, sto dando un esempio per ZIP un file in PL/SQL. Sto usando Alexandria PL/SQL Util Library per eseguire questa attività. La stessa libreria che ho usato per l'esempio di esportazione dei dati in Excel dalla tabella del database Oracle. Segui questi passaggi per creare un file ZIP utilizzando PL/SQL in Oracle.

Crea un file ZIP in Oracle utilizzando PL/SQL

  1. In primo luogo, scarica la libreria PL/SQL di Alexandria da Github utilizzando il seguente link Download.
  2. Dopo aver scaricato il file, estrailo e individua zip_util_pkg.pks e zip_util_pkg.pkb file in \alexandria-plsql-utils-master\ora\ directory ed eseguire questi script nello schema del database Oracle per installarlo.
  3. Se sono necessari oggetti supportati, trova nella cartella \alexandria-plsql-utils-master\ e installalo.
  4. Hai installato il pacchetto di utilità e gli oggetti correlati. Ora crea un oggetto directory nel tuo schema, come mostrato nell'esempio seguente.
Create OR Replace Directory zip_files as 'c:\zip_files';
  1. Quindi crea la funzione sottostante nello stesso schema per convertire un file in un BLOB. Questa funzione verrà utilizzata per creare un file zip utilizzando il pacchetto zip_util_pkg PL/SQL. Nota inoltre, che prima di creare questa funzione modifica gli ZIP_FILES nome della directory con l'oggetto directory del database che hai creato sopra.
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;
/

Test

Nota: Nell'esempio seguente, il file emp.dat deve esistere nella directory ZIP_FILES che abbiamo creato sopra.

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

Ora puoi controllare la posizione della directory ZIP_FILES per il file plsql_1.zip.

Per comprimere più file

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

Vedi anche:

  • Decomprimi un file in PL/SQL
  • Crea file JSON in Oracle 11g utilizzando PL/SQL
  • Esporta dati da Oracle SQL Developer a Excel
  • Crea file PDF utilizzando PL/SQL