Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Ví dụ về APEX_ZIP

Trong Oracle 12c trở đi, trên đó Oracle Apex được cài đặt theo mặc định, bạn có thể sử dụng APEX_ZIP Gói PL / SQL để nén các tệp. Vì vậy, ở đây tôi đưa ra một vài Oracle APEX_ZIP ví dụ:

Ví dụ về APEX_ZIP của Oracle

Mã PL / SQL sau lấy các tệp (BLOB ) từ một bảng và nén nó và cung cấp cho bạn một BLOB cuối cùng có tất cả các tệp bạn đã thêm.

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;

Bạn có thể thấy trong đoạn mã trên rằng cuối cùng, bạn sẽ nhận được BLOB cuối cùng mà bạn có thể lưu trữ thêm trong bảng hoặc gửi nó đến một thủ tục hoặc ghi một tệp trên máy chủ.

Ví dụ sau là một bổ sung cho đoạn mã trên. Sau khi nén tệp, nó sẽ ghi tệp zip vào máy chủ.

Zip Tệp sử dụng gói APEX_ZIP và Ghi vào Máy chủ

Để ghi tệp trên máy chủ, bạn cần một đối tượng Thư mục Oracle. Dưới đây là một ví dụ, cách tạo một đối tượng thư mục trong Oracle trỏ đến một thư mục trên máy chủ.

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

Sau khi tạo thư mục, bạn có thể ghi tệp zip như được hiển thị trong ví dụ dưới đây:

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;

Sau khi chạy mã PL / SQL ở trên, bạn sẽ tìm thấy tệp my_zip.zip tại MY_DIR vị trí thư mục trên máy chủ.

Hướng dẫn liên quan:

  • Cách tải BLOB từ tệp trong PL / SQL?
  • Làm cách nào để UNZIP một tệp trong PL / SQL?

Tham khảo:

  • APEX_ZIP Hướng dẫn sử dụng 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. Mã định danh PLS-00201 'PACKAGENAME.PROCEDURENAME' phải được khai báo

  2. Phân tích cú pháp tnsnames.ora trong Visual C # 2008

  3. Làm thế nào để sử dụng Oracle ORDER BY và ROWNUM một cách chính xác?

  4. Lỗi khi cập nhật Tham gia

  5. Làm thế nào để triển khai tìm nạp hàng loạt với Fluent NHibernate khi làm việc với Oracle?