Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie ZIP eine Datei in PL/SQL?

In diesem Blogbeitrag gebe ich ein Beispiel für das ZIP-ZIP einer Datei in PL/SQL. Ich verwende Alexandria PL/SQL Util Library, um diese Aufgabe auszuführen. Dieselbe Bibliothek, die ich für das Beispiel zum Exportieren von Daten nach Excel aus der Oracle-Datenbanktabelle verwendet habe. Befolgen Sie diese Schritte, um eine ZIP-Datei mit PL/SQL in Oracle zu erstellen.

ZIP-Datei in Oracle mit PL/SQL erstellen

  1. Laden Sie zunächst die Alexandria PL/SQL-Bibliothek von Github über den folgenden Link Download herunter.
  2. Nachdem Sie die Datei heruntergeladen haben, extrahieren Sie sie und suchen Sie die zip_util_pkg.pks und zip_util_pkg.pkb Dateien im Verzeichnis \alexandria-plsql-utils-master\ora\ Verzeichnis und führen Sie diese Skripte in Ihrem Oracle-Datenbankschema aus, um es zu installieren.
  3. Wenn unterstützte Objekte benötigt werden, suchen Sie im Ordner \alexandria-plsql-utils-master\ und installieren Sie es.
  4. Sie haben das Dienstprogrammpaket und zugehörige Objekte installiert. Erstellen Sie nun ein Verzeichnisobjekt in Ihrem Schema, wie im folgenden Beispiel gezeigt.
Create OR Replace Directory zip_files as 'c:\zip_files';
  1. Erstellen Sie dann die folgende Funktion im selben Schema, um eine Datei in ein BLOB zu konvertieren. Diese Funktion wird verwendet, um eine Zip-Datei mit dem PL/SQL-Paket zip_util_pkg zu erstellen. Auch beachten dass Sie vor dem Erstellen dieser Funktion die ZIP_FILES ändern Verzeichnisname mit Ihrem Datenbankverzeichnisobjekt, das Sie oben erstellt haben.
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

Hinweis: Im folgenden Beispiel muss die Datei emp.dat im oben erstellten ZIP_FILES-Verzeichnis vorhanden sein.

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

Sie können jetzt den Speicherort des Verzeichnisses ZIP_FILES für die Datei plsql_1.zip überprüfen.

Um mehrere Dateien zu komprimieren

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

Siehe auch:

  • Entpacke eine Datei in PL/SQL
  • JSON-Datei in Oracle 11g mit PL/SQL erstellen
  • Daten von Oracle SQL Developer nach Excel exportieren
  • PDF-Dateien mit PL/SQL erstellen