V systému Oracle 12c a novějším, na kterém je standardně nainstalován Oracle Apex, můžete použít APEX_ZIP PL/SQL balíček pro zip souborů. Takže zde dávám několik Oracle APEX_ZIP příklady:
Příklad Oracle APEX_ZIP
Následující kód PL/SQL získá soubory (BLOB ) z tabulky a zazipujte jej a získáte konečný BLOB který obsahuje všechny soubory, které jste přidali.
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;
Ve výše uvedeném kódu můžete vidět, že na konci získáte finální BLOB kterou můžete dále uložit do tabulky nebo ji odeslat do procedury nebo zapsat soubor na server.
Následující příklad je doplňkem k výše uvedenému kódu. Po zazipování souborů zapíše soubor zip na server.
Zip soubory pomocí balíčku APEX_ZIP a zápis na server
Chcete-li zapsat soubor na server, potřebujete objekt Oracle Directory. Níže je uveden příklad, jak vytvořit adresářový objekt v Oracle ukazující na adresář na serveru.
Create or Replace directory my_dir as '/your/server/path';
Po vytvoření adresáře můžete zapsat soubor zip, jak je znázorněno v níže uvedeném příkladu:
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 spuštění výše uvedeného PL/SQL kódu najdete soubor my_zip.zip v MY_DIR umístění adresáře na serveru.
Související výukové programy:
- Jak získat BLOB ze souboru v PL/SQL?
- Jak rozbalit soubor v PL/SQL?
Odkaz:
- Příručka Oracle APEX_ZIP