OracleApexがデフォルトでインストールされているOracle12c以降では、APEX_ZIPを使用できます。 ファイルを圧縮するためのPL/SQLパッケージ。そこで、ここでいくつかのOracle APEX_ZIPを提供します。 例:
OracleAPEX_ZIPの例
次のPL/SQLコードはファイルを取得します(BLOB )テーブルから圧縮して、最終的なBLOBを取得します。 追加したすべてのファイルが含まれています。
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;をファイナライズします
上記のコードで、最後に最終的なBLOBを取得することがわかります。 これをさらにテーブルに保存したり、プロシージャに送信したり、サーバーにファイルを書き込んだりできます。
次の例は、上記のコードへの追加です。ファイルをzipすると、zipファイルがサーバーに書き込まれます。
APEX_ZIPパッケージを使用したZipファイルとサーバーへの書き込み
サーバーにファイルを書き込むには、OracleDirectoryオブジェクトが必要です。以下は、サーバー上のディレクトリを指すディレクトリオブジェクトをOracleで作成する方法の例です。
Create or Replace directory my_dir as '/your/server/path';
ディレクトリを作成したら、次の例に示すようにzipファイルを作成できます。
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;
上記のPL/SQLコードを実行すると、ファイルmy_zip.zipが見つかります。 MY_DIRで サーバー上のディレクトリの場所。
関連チュートリアル:
- PL / SQLのファイルからBLOBを取得するにはどうすればよいですか?
- PL / SQLでファイルを解凍するにはどうすればよいですか?
参照:
- APEX_ZIPOracleマニュアル