UTL_COMPRESS
パッケージは、一連のデータ圧縮ユーティリティを提供します。
この章では、次の項目について説明します。
定数
例外
使用上の注意
ピース単位操作に使用するハンドルの最大数を定義します。
UTLCOMP_MAX_HANDLE CONSTANT PLS_INTEGER := 5;
表204-1 UTL_COMPRESSの例外
例外 | 説明 |
---|---|
|
圧縮後の表現が大きすぎます。 |
|
入力または出力データ・ストリームの書式が無効です。 |
|
1つの引数のタイプまたは値が無効です。 |
|
ピース単位の圧縮または圧縮解除には無効なハンドルです。 |
|
データ・ストリームの圧縮または圧縮解除中にエラーが発生しました。 |
LZ
*ファンクションによって戻された一時LOB
は、コール元がDBMS_LOB.FREETEMPORARY
コールを使用して解放する必要があります。
LZ_COMPRESS
*またはLZ_UNCOMPRESS
*に渡されたBFILE
は、DBMS_LOB.FILEOPEN
でオープンする必要があります。
特別な状況(入力がすでに圧縮されている場合)では、UTL_COMPRESS
サブプログラムの1つで生成された出力が、入力と同じ大きさかまたは入力よりもわずかに大きくなることがあります。
UTL_COMPRESS
で圧縮したデータの出力は、1つのファイル上のgzip
(-n
オプションを指定)/gunzip
と互換性があります。
表204-2 UTL_COMPRESSパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
ピース単位の圧縮(または圧縮解除)コンテキストに対するハンドルが、オープンしているかクローズしているかどうかを確認します。 |
|
Lempel-Ziv圧縮アルゴリズムを使用してデータを圧縮します。 |
|
1つの圧縮データを追加します。 |
|
ピース単位の圧縮操作をクローズして終了します。 |
|
圧縮状態とデータを保持するピース単位のコンテキストを初期化します。 |
|
圧縮された入力を受け入れ、有効であることを確認して圧縮を解除します。 |
|
1つの圧縮解除データを抽出します。 |
|
圧縮解除状態とデータを保持するピース単位のコンテキストを初期化します。 |
|
ピース単位の圧縮解除をクローズして終了します。 |
このファンクションは、ピース単位の圧縮(または圧縮解除)コンテキストに対するハンドルが、オープンしているかクローズしているかどうかを確認します。
構文
UTL_COMPRESS.ISOPEN( handle in binary_integer) RETURN BOOLEAN;
パラメータ
指定したピース単位のハンドルがオープンしている場合はTRUE
、それ以外の場合はFALSE
。
IF (UTL_COMPRESS.ISOPEN(myhandle) = TRUE) then UTL_COMPRESS.LZ_COMPRESS_CLOSE(myhandle, lob_1); END IF;
次のようにコーディングすることもできます。
IF (UTL_COMPRESS.ISOPEN(myhandle) = TRUE) THEN UTL_COMPRESS.LZ_UNCOMPRESS_CLOSE(myhandle); END IF;
このファンクションおよびプロシージャでは、Lempel-Ziv圧縮アルゴリズムを使用してデータを圧縮します。
構文
次のファンクションは、RAW
を入力として使用し、圧縮して、圧縮後のRAW
の結果とメタデータを戻します。
UTL_COMPRESS.LZ_COMPRESS ( src IN RAW, quality IN BINARY_INTEGER DEFAULT 6) RETURN RAW;
次のファンクションは、BLOB
を入力として使用し、圧縮して、圧縮後のデータの一時BLOBを戻します。
UTL_COMPRESS.LZ_COMPRESS ( src IN BLOB, quality IN BINARY_INTEGER DEFAULT 6) RETURN BLOB;
次のプロシージャは、圧縮後のデータを、圧縮後のデータ・サイズにトリミングした既存のBLOB(dst)に戻します。
UTL_COMPRESS.LZ_COMPRESS ( src IN BLOB, dst IN OUT NOCOPY BLOB, quality IN BINARY_INTEGER DEFAULT 6);
次のファンクションは、圧縮後のデータの一時BLOB
を戻します。
UTL_COMPRESS.LZ_COMPRESS ( src IN BFILE, quality IN BINARY_INTEGER DEFAULT 6) RETURN BLOB;
次のプロシージャは、圧縮後のデータを、圧縮後のデータ・サイズにトリミングした既存のBLOB(dst)に戻します。
UTL_COMPRESS.LZ_COMPRESS ( src IN BFILE, dst IN OUT NOCOPY BLOB, quality IN BINARY_INTEGER DEFAULT 6);
パラメータ
表204-4 LZ_COMPRESSファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
圧縮するデータ( |
|
圧縮したデータを戻す宛先。 |
|
1から9の範囲の整数。1は高速圧縮、9は最も効率のよい圧縮を指定します。デフォルトは6です。 |
使用上の注意
quality
は、オプションで指定する圧縮チューニング値です。 UTL_COMPRESS
の使用時に、速度と圧縮品質の関係(サイズ縮小の割合)を選択できます。圧縮速度を速くすると、データの圧縮率が低くなります。圧縮速度を遅くすると、データの圧縮率が高くなります。 有効な値は1から9で、1が最も速く、9が最も遅くなります。'quality'のデフォルト値は6です。
このプロシージャは、1つの圧縮データを追加します。
構文
UTL_COMPRESS.LZ_COMPRESS_ADD ( handle IN BINARY_INTEGER, dst IN OUT NOCOPY BLOB, src IN RAW);
パラメータ
表204-5 LZ_COMPRESS_ADDプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ピース単位の圧縮コンテキストへのハンドル。 |
|
圧縮したデータを格納するために、 |
|
圧縮する入力データ。 |
invalid_handle
- 範囲外であるため無効か、ハンドルがオープンではありません。
invalid_argument
- handle、srcまたはdstの値がNULL
であるか、dst
の値が無効です。
このプロシージャは、ピース単位の圧縮操作をクローズして終了します。
構文
UTL_COMPRESS.LZ_COMPRESS_CLOSE ( handle IN BINARY_INTEGER, dst IN OUT NOCOPY BLOB);
パラメータ
表204-6 LZ_COMPRESS_CLOSEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ピース単位の圧縮コンテキストへのハンドル。 |
|
圧縮したデータを格納するために、 |
invalid_handle
- 範囲外であるため無効か、ハンドルが初期化されていません。
invalid_argument
- handle、dst
の値がNULLであるか、dst
の値が無効です。
このファンクションは、圧縮状態とデータを保持するピース単位のコンテキストを初期化します。
構文
UTL_COMPRESS.LZ_COMPRESS_OPEN ( dst IN OUT NOCOPY BLOB, quality IN BINARY_INTEGER DEFAULT 6) RETURN BINARY_INTEGER;
パラメータ
表204-7 LZ_COMPRESS_OPENファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
圧縮したデータを格納するためにユーザーが提供するLOB。 |
|
結果としての圧縮出力の速度と効率の関係。
|
初期化されたピース単位の圧縮コンテキストへのハンドル。
invalid_handle
- ハンドルが無効か、オープンしているハンドルが多すぎます。
invalid_argument
- dst
の値がNULL
であるか、qualityの指定が無効です。
次の場合には、オープンしているハンドルをLZ_COMPRESS_CLOSE
でクローズしてください。
ピース単位の圧縮が完了したとき
処理の途中で例外が発生したとき
クローズしないとハンドルがリークします。
このプロシージャは、RAW
、BLOB
またはBFILE
で圧縮された文字列を入力として使用し、有効な圧縮値であることを検証し、Lempel-Ziv圧縮アルゴリズムを使用して圧縮を解除して、圧縮を解除したRAWまたはBLOB
の結果を戻します。
構文
次のファンクションは、圧縮解除後のデータをRAW
として戻します。
UTL_COMPRESS.LZ_UNCOMPRESS( src IN RAW) RETURN RAW;
次のファンクションは、圧縮解除後のデータを一時BLOB
として戻します。
UTL_COMPRESS.LZ_UNCOMPRESS( src IN BLOB) RETURN BLOB;
次のプロシージャは、圧縮解除後のデータを既存のBLOB
(dst
)に戻します。BLOBは圧縮解除後のデータ・サイズにトリミングされます。
UTL_COMPRESS.LZ_UNCOMPRESS( src IN BLOB, dst IN OUT NOCOPY BLOB);
次のファンクションは、圧縮解除後のデータの一時BLOBを戻します。
UTL_COMPRESS.LZ_UNCOMPRESS( src IN BFILE) RETURN BLOB;
次のプロシージャは、圧縮解除後のデータを既存のBLOB
(dst
)に戻します。元のdst
のデータは上書きされます。
UTL_COMPRESS.LZ_UNCOMPRESS( src IN BFILE, dst IN OUT NOCOPY BLOB);
パラメータ
このプロシージャは、1つの圧縮解除データを抽出します。
構文
UTL_COMPRESS.LZ_UNCOMPRESS_EXTRACT( handle IN BINARY_INTEGER, dst OUT NOCOPY RAW);
パラメータ
no_data_found
- 圧縮解除が終了しました。
invalid_handle
- 範囲外であるため無効か、ハンドルが初期化されていません。
invalid_argument
- handleの値がNULLです。
このファンクションは、圧縮解除状態とデータを保持するピース単位のコンテキストを初期化します。
構文
UTL_COMPRESS.LZ_UNCOMPRESS_OPEN( src IN BLOB) RETURN BINARY_INTEGER;
パラメータ
初期化されたピース単位の圧縮コンテキストへのハンドル。
invalid_handle
- ハンドルが無効か、オープンしているハンドルが多すぎます。
invalid_argument
- src
の値がNULL
です。
次の場合には、オープンしているハンドルをLZ_UNCOMPRESS_CLOSE
でクローズしてください。
ピース単位の圧縮解除が完了したとき
処理の途中で例外が発生したとき
クローズしないとハンドルがリークします。
このプロシージャは、ピース単位の圧縮解除をクローズして終了します。
構文
UTL_COMPRESS.LZ_UNCOMPRESS_CLOSE( handle IN BINARY_INTEGER);
パラメータ
invalid_handle
- 範囲外であるため無効か、ハンドルが初期化されていません。
invalid_argument
- handleの値がNULL
です。