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
-
Mã định danh PLS-00201 'PACKAGENAME.PROCEDURENAME' phải được khai báo
-
Phân tích cú pháp tnsnames.ora trong Visual C # 2008
-
Làm thế nào để sử dụng Oracle ORDER BY và ROWNUM một cách chính xác?
-
Lỗi khi cập nhật Tham gia
-
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?