この投稿の最後にある pl/sql コード ブロックを参照してください。
zip から特定のファイルを抽出する pl/sql コードを書いています。http://technology.amis.nl/wp-content/uploads/2010/06/as_zip7.txtにある「as_zip」パッケージを使用して、zip () で見つかったファイル名を取得し、AS_ZIP.GET_FILE_LIST
特定のものを抽出しています。 BLOB
( )に変換され、AS_ZIP.GET_FILE
を使用してファイルに書き込まれますUTL_FILE
。
最初の質問
モニタリングで見た限りでは、UNDO TABLESPACE
このプロセス中に に書き込まれるようには見えませんが、これが本当であることを他の人に確認したかったのです...特定のファイルの内容をBLOB
ファイルに書き出される場合、影響UNDO TABLESPACE
はありますか? ビジネスが課金対象のデータベースで使用するメガバイトごとに、可能な限りテーブルスペースを減らす方法を常に探す必要があります...
2 番目の質問
ブロブをファイルに書き込むという点で、私が行った方法よりも効率的な方法はありますか? 最初のファイル (たまたま 3.03GB で最大) は、ファイル システムへの書き込みがすばやく行われますが、後続の各ファイルの書き込みはますます遅くなるように見えます。リソースを解放するか、別の方法で割り当てる必要がありますか、それとも....
SET SERVEROUTPUT ON
declare
zip_files as_zip.file_list;
l_file UTL_FILE.FILE_TYPE;
L_BUFFER RAW (32767);
L_AMOUNT BINARY_INTEGER := 32767;
l_pos INTEGER;
L_BLOB BLOB;
l_blob_len INTEGER;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
ZIP_FILES := AS_ZIP.GET_FILE_LIST( 'MY_DIR', 'MY_FILE.zip' );
for i in zip_files.first() .. zip_files.last
LOOP
FOR EXT_TABLE_REC IN (SELECT LOCATION FROM USER_EXTERNAL_LOCATIONS) LOOP
-- Check if there's a match between what's in the zip file and what the external table name is
IF (INSTR(TRIM(LOWER(ZIP_FILES(I))),TRIM(LOWER(EXT_TABLE_REC.LOCATION || '__'))) > 0) THEN
DBMS_OUTPUT.PUT_LINE('Match found on ' || ZIP_FILES(I) || ', ' || EXT_TABLE_REC.LOCATION || ' - processing...');
L_BLOB := AS_ZIP.GET_FILE('MY_DIR', 'MY_FILE.zip', zip_files(i));
-- Open the destination file. Note the third parameter "wb"
l_file := UTL_FILE.FOPEN ('MY_DIR', EXT_TABLE_REC.LOCATION, 'wb');
l_blob_len := DBMS_LOB.getlength (l_blob);
-- Read chunks of the BLOB and write them to the file until complete.
l_pos := 1;
WHILE l_pos < l_blob_len
LOOP
DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer);
UTL_FILE.put_raw(l_file, l_buffer, FALSE);
l_pos := l_pos + l_amount;
END LOOP;
-- Close the file.
UTL_FILE.FCLOSE (L_FILE);
end if;
end loop;
end loop;
END;
/
誰かが疑問に思っている場合に備えて、ログイン時にデータベース情報として返されるのは次のとおりです。
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, Oracle Label Security,
OLAP, Data Mining, Oracle Database Vault and Real Application Testing options
編集 1オラクルのサイトで見つけた情報に基づい
て、ブロックを削除しました。EXCEPTION WHEN OTHERS
今、プロセスがハングしているように見えるので、問題がどこで発生しているのかわかりません...