sql >> Databasteknik >  >> RDS >> Oracle

Exempel på APEX_ZIP

I Oracle 12c och framåt, där Oracle Apex är installerat som standard, kan du använda APEX_ZIP PL/SQL-paket för att zippa filerna. Så här ger jag några Oracle APEX_ZIP exempel:

Oracle APEX_ZIP-exempel

Följande PL/SQL-kod hämtar filerna (BLOB ) från en tabell och zippa den, och ger dig en sista BLOB som har alla filer du lagt till.

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;

Du kan se i koden ovan att du i slutet får den sista BLOB som du ytterligare kan lagra i tabellen eller skicka den till en procedur eller skriva en fil på servern.

Följande exempel är ett tillägg till ovanstående kod. Efter att ha zippat filerna kommer den att skriva zip-filen till servern.

Zip-filer med APEX_ZIP-paketet och skriv till servern

För att skriva filen på servern behöver du ett Oracle Directory-objekt. Nedan är ett exempel på hur man skapar ett katalogobjekt i Oracle som pekar på en katalog på servern.

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

När du har skapat katalogen kan du skriva zip-filen som visas i exemplet nedan:

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;

Efter att ha kört ovanstående PL/SQL-kod hittar du filen my_zip.zip vid MY_DIR katalogplats på servern.

Relaterade självstudier:

  • Hur får man BLOB från fil i PL/SQL?
  • Hur tar man bort en fil i PL/SQL?

Referens:

  • APEX_ZIP Oracle Manual
  1. Uppgradering av PostgreSQL 11 till PostgreSQL 13 med TimescaleDB och PostGIS i Linux med pg_upgrade

  2. Mysql sträng delad

  3. Hur man skapar en sammansatt primär nyckel i SQL Server (T-SQL-exempel)

  4. MySQL Ändra användarlösenord