Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przykład APEX_ZIP

W Oracle 12c i nowszych, w których Oracle Apex jest domyślnie zainstalowany, możesz użyć APEX_ZIP Pakiet PL/SQL do skompresowania plików. Więc tutaj podaję kilka Oracle APEX_ZIP przykłady:

Przykład Oracle APEX_ZIP

Poniższy kod PL/SQL pobiera pliki (BLOB ) z tabeli i skompresuj go, a otrzymasz końcowy BLOB zawiera wszystkie dodane pliki.

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;

Możesz zobaczyć w powyższym kodzie, że na końcu otrzymasz ostateczny BLOB które możesz dalej przechowywać w tabeli lub wysłać do procedury lub zapisać plik na serwerze.

Poniższy przykład jest dodatkiem do powyższego kodu. Po skompresowaniu plików zapisze plik zip na serwerze.

Skompresuj pliki za pomocą pakietu APEX_ZIP i zapisuj na serwerze

Aby zapisać plik na serwerze, potrzebujesz obiektu Oracle Directory. Poniżej znajduje się przykład, jak utworzyć obiekt katalogu w Oracle wskazujący katalog na serwerze.

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

Po utworzeniu katalogu możesz zapisać plik zip, jak pokazano w poniższym przykładzie:

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;

Po uruchomieniu powyższego kodu PL/SQL znajdziesz plik my_zip.zip w MY_DIR lokalizacja katalogu na serwerze.

Powiązane samouczki:

  • Jak pobrać BLOB z pliku w PL/SQL?
  • Jak rozpakować plik w PL/SQL?

Odniesienie:

  • Podręcznik Oracle APEX_ZIP
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcje a procedury w Oracle

  2. Sortowanie bez rozróżniania akcentów i wielkości liter w Oracle z LIKE

  3. Obracanie tabeli w SQL (tj. Tabelowanie krzyżowe / tabele krzyżowe)

  4. Korzystając z Oracle, połącz trzy tabele w jedną za pomocą PIVOT

  5. Czy słowo kluczowe „as” jest wymagane w Oracle do zdefiniowania aliasu?