Oracle
 sql >> база данни >  >> RDS >> Oracle

Пример за APEX_ZIP

В Oracle 12c и по-нататък, на който Oracle Apex е инсталиран по подразбиране, можете да използвате APEX_ZIP PL/SQL пакет за архивиране на файловете. Така че тук давам няколко Oracle APEX_ZIP примери:

Пример за Oracle APEX_ZIP

Следният PL/SQL код получава файловете (BLOB ) от таблица и го архивирайте и ви дава окончателен BLOB който съдържа всички файлове, които сте добавили.

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;

Можете да видите в кода по-горе, че накрая ще получите окончателния BLOB който можете допълнително да съхраните в таблицата или да го изпратите на процедура или да напишете файл на сървъра.

Следният пример е допълнение към горния код. След архивиране на файловете, той ще запише zip файла на сървъра.

Zip файлове с помощта на пакет APEX_ZIP и запис на сървъра

За да запишете файла на сървъра, ви е необходим обект Oracle Directory. По-долу е даден пример как да създадете обект на директория в Oracle, сочещ към директория на сървъра.

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

След като създадете директорията, можете да напишете zip файла, както е показано в примера по-долу:

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;

След като изпълните горния PL/SQL код, ще намерите файла my_zip.zip в MY_DIR местоположение в директорията на сървъра.

Свързани уроци:

  • Как да получа BLOB от файл в PL/SQL?
  • Как да разархивирате файл в PL/SQL?

Справка:

  • APEX_ZIP Ръководство за Oracle
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените приоритета за едновременна програма

  2. Javascript дата към sql обект дата

  3. NLS_LANG настройка за JDBC тънък драйвер?

  4. Свързване с Oracle Database с помощта на Sql Server Integration Services

  5. Блок за инжектиране на Oracle SQL с DBMS_ASSERT