그것 PLSQL로 할 수 있어(그 1 PLSQL로 Zip 파일을 작성한다)
나는 하고 싶지 않았지만, 손님으로부터 "하고 싶다"라고 말했다.
PLSQL에서 Zip 파일을 만듭니다.
오라클에는 "UTL_COMPRESS"이라는 패키지가 있으며 압축, 압축 해제가 가능하지만 불행히도 Zip은 지원하지 않습니다.
"AS_ZIP"라는 패키지를 도입하여 쉽게 대응할 수있었습니다.
gunzip과 Zip의 차이는 헤더의 차이뿐이므로, 바이너리로 고르고리 고치면 Zip이 된다고 합니다. (훌륭함)
AS_ZIP을 사용한 ZIP 작성 샘플
Zip 작성 프로 시저
기본적으로는 필요한 파일을 add1file 하고 finish_zip 으로 작성, save_zip 로 써내는 것만.
내보내기 대상은 OracleDirectory를 지정합니다.
CREATE_ZIP.sqlCREATE OR REPLACE PROCEDURE CREATE_ZIP
IS
-- OracleDirectory
DIRECTORY_NAME CONSTANT VARCHAR2(100) := 'DIR';
-- 直接記述時、書き出し文字コード
TXT_CODE CONSTANT VARCHAR2(100) := 'JA16SJIS';
vFileName1 VARCHAR2(256);
vFileName2 VARCHAR2(256);
vZipName VARCHAR2(256);
bZipped BLOB;
BEGIN
-- csvファイルを作成する
vFileName1 := 'test.csv';
create_csv(vFileName1);
-- 作成したファイルを追加
as_zip.add1file( bZipped, vFileName1, as_zip.file2blob (DIRECTORY_NAME,vFileName1));
-- ディレクトリの指定も可能
vFileName2 := 'dir/test.txt';
-- テキスト内容を直接記述して追加
as_zip.add1file( bZipped, vFileName2, utl_i18n.string_to_raw( 'dirの中にいる' , TXT_CODE ) );
-- ファイルの追加を終了
as_zip.finish_zip( bZipped );
vZipName := 'test.zip';
-- 書き出し
as_zip.save_zip( bZipped, DIRECTORY_NAME, vZipName);
END CREATE_ZIP;
/
Csv 작성 프로 시저
아마 잘 하는 SJIS의 CSV의 작성 프로시저도 공개.
utl_file은 put일 수 있지만 쓸모없는 문자로 죽을 수 있으므로 put_raw를 사용합니다.
CREATE_CSV.sqlCREATE OR REPLACE PROCEDURE CREATE_CSV(
vFileName IN VARCHAR2
)
IS
-- OracleDirectory
DIRECTORY_NAME CONSTANT VARCHAR2(100) := 'DIR';
-- CSV作成時に利用する定数
CSV_CODE CONSTANT VARCHAR2(100) := 'JA16SJIS';
CR_CODE CONSTANT VARCHAR2(10) := CHR(13);
LF_CODE CONSTANT VARCHAR2(10) := CHR(10);
NEW_LINE_CODE CONSTANT VARCHAR2(100) := CR_CODE||LF_CODE;
-- ファイル作成時に利用するファイルハンドル
vHandle UTL_FILE.FILE_TYPE;
BEGIN
vHandle := utl_file.fopen(DIRECTORY_NAME, vFileName, 'WB', 32767);
-- Testテーブルの中身を明細行として出力
for rec in (
select col1 || ',' || col2 as var -- csvの明細行を作成
from test
order by col1
) loop
-- 文字コードを指定して改行コードと共に出力
utl_file.put_raw(vHandle, utl_i18n.string_to_raw( rec.var || NEW_LINE_CODE , CSV_CODE ), TRUE );
end loop;
utl_file.fclose(vHandle);
END CREATE_CSV;
/
결과
제대로되어 있습니다.
Reference
이 문제에 관하여(그것 PLSQL로 할 수 있어(그 1 PLSQL로 Zip 파일을 작성한다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/devfox/items/2f576005a1b2191dc991
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
CREATE OR REPLACE PROCEDURE CREATE_ZIP
IS
-- OracleDirectory
DIRECTORY_NAME CONSTANT VARCHAR2(100) := 'DIR';
-- 直接記述時、書き出し文字コード
TXT_CODE CONSTANT VARCHAR2(100) := 'JA16SJIS';
vFileName1 VARCHAR2(256);
vFileName2 VARCHAR2(256);
vZipName VARCHAR2(256);
bZipped BLOB;
BEGIN
-- csvファイルを作成する
vFileName1 := 'test.csv';
create_csv(vFileName1);
-- 作成したファイルを追加
as_zip.add1file( bZipped, vFileName1, as_zip.file2blob (DIRECTORY_NAME,vFileName1));
-- ディレクトリの指定も可能
vFileName2 := 'dir/test.txt';
-- テキスト内容を直接記述して追加
as_zip.add1file( bZipped, vFileName2, utl_i18n.string_to_raw( 'dirの中にいる' , TXT_CODE ) );
-- ファイルの追加を終了
as_zip.finish_zip( bZipped );
vZipName := 'test.zip';
-- 書き出し
as_zip.save_zip( bZipped, DIRECTORY_NAME, vZipName);
END CREATE_ZIP;
/
CREATE OR REPLACE PROCEDURE CREATE_CSV(
vFileName IN VARCHAR2
)
IS
-- OracleDirectory
DIRECTORY_NAME CONSTANT VARCHAR2(100) := 'DIR';
-- CSV作成時に利用する定数
CSV_CODE CONSTANT VARCHAR2(100) := 'JA16SJIS';
CR_CODE CONSTANT VARCHAR2(10) := CHR(13);
LF_CODE CONSTANT VARCHAR2(10) := CHR(10);
NEW_LINE_CODE CONSTANT VARCHAR2(100) := CR_CODE||LF_CODE;
-- ファイル作成時に利用するファイルハンドル
vHandle UTL_FILE.FILE_TYPE;
BEGIN
vHandle := utl_file.fopen(DIRECTORY_NAME, vFileName, 'WB', 32767);
-- Testテーブルの中身を明細行として出力
for rec in (
select col1 || ',' || col2 as var -- csvの明細行を作成
from test
order by col1
) loop
-- 文字コードを指定して改行コードと共に出力
utl_file.put_raw(vHandle, utl_i18n.string_to_raw( rec.var || NEW_LINE_CODE , CSV_CODE ), TRUE );
end loop;
utl_file.fclose(vHandle);
END CREATE_CSV;
/
Reference
이 문제에 관하여(그것 PLSQL로 할 수 있어(그 1 PLSQL로 Zip 파일을 작성한다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/devfox/items/2f576005a1b2191dc991텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)