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

APEX_ZIP-Beispiel

Ab Oracle 12c, auf dem Oracle Apex standardmäßig installiert ist, können Sie APEX_ZIP verwenden PL/SQL-Paket, um die Dateien zu komprimieren. Also hier gebe ich ein paar Oracle APEX_ZIP Beispiele:

Oracle APEX_ZIP-Beispiel

Der folgende PL/SQL-Code ruft die Dateien ab (BLOB ) aus einer Tabelle und zippen Sie es und gibt Ihnen ein abschließendes BLOB das alle Dateien enthält, die Sie hinzugefügt haben.

declare
   b_zip_file blob;

   cursor c_files
    is
    select file_name,
    file_content
    from emp_files
       where empno = 7894;

begin
   for c in c_files 
   loop
      -- adds the each blob to b_zip_file blob one by one
      apex_zip.add_file (
      p_zipped_blob => b_zip_file,
      p_file_name => c.file_name,
      p_content => c.file_content );
   end loop;

   -- finalizes the blob
   apex_zip.finish (
     p_zipped_blob => b_zip_file );

end;

Sie können im obigen Code sehen, dass Sie am Ende das endgültige BLOB erhalten die Sie weiter in der Tabelle speichern oder an eine Prozedur senden oder eine Datei auf dem Server schreiben können.

Das folgende Beispiel ist eine Ergänzung zum obigen Code. Nach dem Komprimieren der Dateien wird die Zip-Datei auf den Server geschrieben.

Zip-Dateien mit dem APEX_ZIP-Paket und auf den Server schreiben

Um die Datei auf den Server zu schreiben, benötigen Sie ein Oracle Directory-Objekt. Unten ist ein Beispiel, wie man ein Verzeichnisobjekt in Oracle erstellt, das auf ein Verzeichnis auf dem Server zeigt.

Create or Replace directory my_dir as '/your/server/path';

Nachdem Sie das Verzeichnis erstellt haben, können Sie die ZIP-Datei wie im folgenden Beispiel gezeigt schreiben:

declare
   b_zip_file blob;

   -- variables for writing the files
   l_file       UTL_FILE.file_type;
   l_buffer     RAW (32767);
   l_amount     BINARY_INTEGER := 32767;
   l_pos        INTEGER := 1;
   l_blob_len   INTEGER;
   -- end variable declaration for file
   cursor c_files
    is
    select file_name,
    file_content
    from emp_files
       where empno = 7894;
begin
   for c in c_files 
   loop
      -- adds the each blob to b_zip_file blob one by one
      apex_zip.add_file (
      p_zipped_blob => b_zip_file,
      p_file_name => c.file_name,
      p_content => c.file_content );
   end loop;

   -- finalizes the blob
   apex_zip.finish (
     p_zipped_blob => b_zip_file );
   
   -- write the file
   l_blob_len := DBMS_LOB.getlength (b_zip_file);

   l_file :=
      UTL_FILE.fopen ('MY_DIR',
                     'my_zip.zip',
                      'WB',
                      32767);

   WHILE l_pos < l_blob_len
   LOOP

      DBMS_LOB.read (b_zip_file,
                     l_amount,
                     l_pos,
                     l_buffer);
      UTL_FILE.put_raw (l_file, l_buffer, TRUE);
      l_pos := l_pos + l_amount;
   END LOOP;

   UTL_FILE.fclose (l_file);
end;

Nachdem Sie den obigen PL/SQL-Code ausgeführt haben, finden Sie die Datei my_zip.zip im MY_DIR Verzeichnisspeicherort auf dem Server.

Verwandte Tutorials:

  • Wie erhalte ich BLOB aus einer Datei in PL/SQL?
  • Wie entpacke ich eine Datei in PL/SQL?

Referenz:

  • APEX_ZIP Oracle-Handbuch