Di Oracle 12c dan seterusnya, di mana Oracle Apex secara default diinstal, Anda dapat menggunakan APEX_ZIP Paket PL/SQL untuk meng-zip file. Jadi di sini saya memberikan beberapa Oracle APEX_ZIP contoh:
Contoh APEX_ZIP Oracle
Kode PL/SQL berikut mendapatkan file (BLOB ) dari tabel dan zip, dan memberi Anda BLOB final terakhir yang memiliki semua file yang Anda tambahkan.
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;
Anda dapat melihat pada kode di atas bahwa pada akhirnya, Anda akan mendapatkan BLOB terakhir yang selanjutnya dapat Anda simpan dalam tabel atau kirimkan ke prosedur atau tulis file di server.
Contoh berikut adalah tambahan dari kode di atas. Setelah zip file, itu akan menulis file zip ke server.
Zip File menggunakan paket APEX_ZIP dan Tulis ke Server
Untuk menulis file di server, Anda memerlukan objek Direktori Oracle. Di bawah ini adalah contoh, cara membuat objek direktori di Oracle yang menunjuk ke direktori di server.
Create or Replace directory my_dir as '/your/server/path';
Setelah membuat direktori, Anda dapat menulis file zip seperti yang ditunjukkan pada contoh di bawah ini:
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;
Setelah menjalankan kode PL/SQL di atas, Anda akan menemukan file my_zip.zip di MY_DIR lokasi direktori di server.
Tutorial Terkait:
- Bagaimana Cara Mendapatkan BLOB dari File di PL/SQL?
- Bagaimana cara UNZIP File di PL/SQL?
Referensi:
- Panduan Oracle APEX_ZIP