この投稿の最後にある 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今、プロセスがハングしているように見えるので、問題がどこで発生しているのかわかりません...