W Oracle 12c i nowszych, w których Oracle Apex jest domyślnie zainstalowany, możesz użyć APEX_ZIP
Pakiet PL/SQL do skompresowania plików. Więc tutaj podaję kilka Oracle APEX_ZIP
przykłady:
Przykład Oracle APEX_ZIP
Poniższy kod PL/SQL pobiera pliki (BLOB
) z tabeli i skompresuj go, a otrzymasz końcowy BLOB
zawiera wszystkie dodane pliki.
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;
Możesz zobaczyć w powyższym kodzie, że na końcu otrzymasz ostateczny BLOB
które możesz dalej przechowywać w tabeli lub wysłać do procedury lub zapisać plik na serwerze.
Poniższy przykład jest dodatkiem do powyższego kodu. Po skompresowaniu plików zapisze plik zip na serwerze.
Skompresuj pliki za pomocą pakietu APEX_ZIP i zapisuj na serwerze
Aby zapisać plik na serwerze, potrzebujesz obiektu Oracle Directory. Poniżej znajduje się przykład, jak utworzyć obiekt katalogu w Oracle wskazujący katalog na serwerze.
Create or Replace directory my_dir as '/your/server/path';
Po utworzeniu katalogu możesz zapisać plik zip, jak pokazano w poniższym przykładzie:
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 uruchomieniu powyższego kodu PL/SQL znajdziesz plik my_zip.zip
w MY_DIR
lokalizacja katalogu na serwerze.
Powiązane samouczki:
- Jak pobrać BLOB z pliku w PL/SQL?
- Jak rozpakować plik w PL/SQL?
Odniesienie:
- Podręcznik Oracle APEX_ZIP
-
Funkcje a procedury w Oracle
-
Sortowanie bez rozróżniania akcentów i wielkości liter w Oracle z LIKE
-
Obracanie tabeli w SQL (tj. Tabelowanie krzyżowe / tabele krzyżowe)
-
Korzystając z Oracle, połącz trzy tabele w jedną za pomocą PIVOT
-
Czy słowo kluczowe „as” jest wymagane w Oracle do zdefiniowania aliasu?