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