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
- Laden Sie zunächst die Alexandria PL/SQL-Bibliothek von Github über den folgenden Link Download herunter.
- 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.
- Wenn unterstützte Objekte benötigt werden, suchen Sie im Ordner \alexandria-plsql-utils-master\ und installieren Sie es.
- 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';
- 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