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?