ヘッダーをスキップ
Oracle® TimesTen In-Memory Database PL/SQLパッケージ・リファレンス
11gリリース2 (11.2.2)
B66725-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 DBMS_LOB

DBMS_LOBパッケージは、BLOB、CLOB、およびNCLOBを操作するためのサブプログラムを提供します。DBMS_LOBを使用すると、LOBの特定の部分またはLOB全体に対するアクセスおよび操作ができます。

この章の内容は次のとおりです。

『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のラージ・オブジェクト(LOB)に関する説明も参照してください。


DBMS_LOBの使用方法


概要

DBMS_LOBでは、BLOB、CLOBおよびNCLOBの読取り、操作および変更ができます。

LOBの概要は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』のラージ・オブジェクトの概要に関する項を参照してください。


セキュリティ・モデル

このパッケージが提供する操作は、パッケージ所有者SYSではなく、現行のコール・ユーザーのもとで実行されます。

無名PL/SQLブロックからコールされたDBMS_LOBサブプログラムは、カレント・ユーザーの権限を使用して実行されます。ストアド・プロシージャからコールされたDBMS_LOBサブプログラムは、そのストアド・プロシージャの所有者の権限を使用して実行されます。

ユーザーはプロシージャの作成時に、AUTHIDを設定して定義者の権限または実行者の権限のどちらを使用するのかを指示できます。次に例を示します。

CREATE PROCEDURE proc1 AUTHID DEFINER ...
 

または

CREATE PROCEDURE proc1 AUTHID CURRENT_USER ...

AUTHIDについては、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限および実行者の権限に関する説明を参照してください。一時LOBに関係するセキュリティ・モデルについては「使用上の注意」を参照してください。


定数

DBMS_LOBパッケージでは、表2-1に示す定数が使用されます。

表2-1 DBMS_LOBの定数

定数 タイプ 説明

CALL

BINARY_INTEGER

12

コール継続時間を含む一時LOBを作成します。

DEFAULT_CSID

INTEGER

0

これがデフォルトのキャラクタ・セットIDです。

DEFAULT_LANG_CTX

INTEGER

0

これがデフォルトの言語コンテキストです。

LOB_READONLY

BINARY_INTEGER

0

指定したLOBを読取り専用モードでオープンします。

LOB_READWRITE

BINARY_INTEGER

1

指定したLOBを読取り/書取りモードでオープンします。

BLOBMAXSIZE

INTEGER

16777216(16 MB)

BLOBの最大サイズをバイトで設定します。

CLOBMAXSIZE

INTEGER

4194304(4 MB)

CLOBの最大サイズをバイトで設定します。

NO_WARNING

INTEGER

0

成功し、警告メッセージがないことを示します。

SESSION

BINARY_INTEGER

10

セッション継続時間を含む一時LOBを作成します。

注意: TimesTenでは、トランザクションの終了時にLOBの継続時間は終了します。対応するロケータがトランザクションの終了時に無効になっている場合、一時LOBのコンテンツは破棄されます。

TRANSACTION

BINARY_INTEGER

11

トランザクション継続時間を含む一時LOBを作成します。

WARN_INCONVERTIBLE_CHAR

INTEGER

1

変換できない文字があることを示すために変換ファンクションで使用されます。



注意:

  • PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

  • INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。



データ・タイプ

DBMS_LOBパッケージでは、表2-2に示すデータ・タイプが使用されます。

表2-2 DBMS_LOBが使用するデータ・タイプ

タイプ 説明

BLOB

ソースまたは宛先のバイナリLOB

RAW

ソースまたは宛先のRAWバッファ(BLOBで使用)

CLOB

ソースまたは宛先の文字LOB(NCLOBを含む)

VARCHAR2

ソースまたは宛先の文字バッファ(CLOBおよびNCLOBで使用)

INTEGER

バッファまたはLOBのサイズ、LOBへのオフセットまたはアクセス量(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数)


DBMS_LOBパッケージは特別なタイプを定義しません。

NCLOBは、固定幅および可変幅のマルチバイト各国語キャラクタ・セットを格納するためのCLOBです。

CLOB用のDBMS_LOBサブプログラムの仕様部にある句ANY_CSを使用すると、CLOBタイプでCLOBまたはNCLOBロケータ変数を入力として受け入れることができます。


ルールおよび制限

一般的なルールおよび制限

最大LOBサイズ

TimesTenでのLOBの最大サイズは、BLOBでは16 MBで、CLOBまたはNCLOBでは4 MBです。

最大バッファ・サイズ

最大バッファ・サイズは32767バイトです。

バッファ・サイズをバイトで表現するBLOBでは、バイト数の上限は32767です。

バッファ・サイズを文字で表現するCLOBまたはNCLOBでは、文字数によるバッファの上限は32767バイトです。たとえば、固定幅の2バイト文字を使用する場合、(20000*2 = 40000は32767より大きいため)20000文字はエラーになります。


使用上の注意

DBMS_LOBサブプログラムはLOBロケータに基づいて動作します。DBMS_LOBサブプログラムを正常に実行するには、データベース表領域にすでに存在しているLOB(一時LOB(下部で説明)または永続LOB)を示す入力ロケータを用意する必要があります。


重要:

  • TimesTenでは、LOBロケータはトランザクションが終了すると無効になります。

  • LOBロケータを使用するAPIを介したLOBの操作では、TimesTenの一時領域が使用されます。このような操作をかなりの回数実行すると、TimesTenの一時データ・パーティションのサイズを拡大しなければならなくなる場合があります。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のTempSizeに関する説明を参照してください。


データベースでLOBを使用するには、最初にSQLデータ定義言語(DDL)を使用して、BLOBCLOBまたはNCLOBタイプの列が含まれる表を定義する必要があります。

TimesTenでは、LOB内にデータを書き込むには以前のデータを上書きする必要があります。LOB内にデータを挿入し、その位置からLOBの終了の方向に以前のデータを移動する機能はありません。同様に、TimesTenでLOB内のデータを削除するは、以前のデータをゼロまたはnullデータで上書きする必要があります。LOB内のデータを削除し、その位置からLOBの開始方向に以前のデータを移動する機能はありません。いずれの場合も、(指定したオフセット位置からのLOB内の空き領域が、書き込むデータよりも少量の場合を除き、)TimesTenではLOBのサイズは変更されません(Oracle Databaseでは、DBMS_LOB FRAGMENTプロシージャを使用し、データを挿入または削除したり、他のデータの移動することによって、LOBのサイズを変更できます。TimesTenではこれらのプロシージャはサポートされていません)。

DBMS_LOBのプロシージャおよびファンクションは、TimesTenのLOBおよびパススルーLOB(TimesTenを介してアクセスする、TimesTenのLOBとして公開されるOracle DatabaseのLOB)の両方でサポートされています。ただし、TimesTenでは、CREATETEMPORARYは一時LOBの作成のためのみに使用できることに注意する必要があります。一時パススルーLOBがSQLなどその他のメカニズムで作成されている場合、そのLOBでISTEMPORARYおよびFREETEMPORARYを使用することは可能です。

TimesTenでは、特にBFILEを対象としたDBMS_LOBサブプログラム、SecureFiles(Database File System機能を含む)、またはLOB内部でのデータ・フラグメントの挿入または削除(FRAGMENTサブプログラム)はサポートしていません。

この後の項では、次の項目について説明します。

永続LOB

表にBLOBCLOBまたはNCLOB列を定義した後、データベース表にLOBを移入するには、SQLデータ操作言語(DML)を使用して、LOB列のロケータを初期化するか、または移入します。

一時LOB

TimesTenでは、一時LOBの定義、作成、削除、アクセスおよび更新がサポートされています。一時LOBのデータは、一時データ・パーティションに格納されます。一時LOBはデータベースに永続的には格納されません。この目的は、主にアプリケーションからLOBデータを変換することです。

一時LOB(BLOB、CLOBまたはNCLOB)は、PL/SQLを使用して作成または操作できます。

一時LOBは、作成されたときは空の状態です。TimesTenで一時LOBは、それが作成されたトランザクションが終了するとすべて削除されます。また、処理が途中で停止したり、データベースがクラッシュした場合、一時LOBは削除され、その領域は解放されます。

一時LOBに関する読取り一貫性、取消し、バックアップ、パラレル処理またはトランザクション管理はサポートされていません。一時LOBでは、読取り一貫性およびロールバックがサポートされていないため、エラーが発生した場合、ユーザーは一時LOBを解放して、最初から操作をやり直す必要があります。

PL/SQLでは、一時LOBに対して複数のロケータは使用しないでください。読取り一貫性、取消しおよびバージョンが、一時LOBに対しては生成されないため、同じ一時LOBに複数のロケータを割り当てると、パフォーマンスに影響する可能性があります。具体的には、各ロケータが一時LOBの独自のコピーを所有するためです。一時LOBロケータは、必要に応じて、参照によって別のプロシージャに渡されます。

他のロケータが一時LOBをポイントしているときにユーザーがその一時LOBを変更すると、一時LOBのコピーが作成されます。すると、変更が実行されたロケータは、一時LOBの新しいコピーをポイントするようになります。変更が行われたロケータと同様、他のロケータもそれ以降同じデータを参照しなくなります。このような状況では、読取り一貫性スナップショットおよびバージョン・ページによって、ユーザーは独自のバージョンのLOBを簡単に参照できるため、永続LOBではディープ・コピーは生成されません。

一時LOBは表スキーマと関連付けられていないため、行内および行外の一時LOBという概念はありません。ユーザーが一時LOBインスタンスを作成すると、エンジンによってLOBデータへのロケータが作成され戻されます。PL/SQLのDBMS_LOBパッケージおよびその他のプログラム・インタフェースは、このロケータを介して、永続LOBに対する操作と同様に一時LOBを操作します。

クライアント側の一時LOBという概念はありません。一時LOBはすべてサーバーに常駐します。

一時LOBのインスタンスは、永続LOBと同様の、適切なDBMS_LOBファンクションおよびプロシージャを使用してアクセスおよび変更できます。一時LOBを永続化するには、COPYプロシージャを使用し、それをデータベース内の(適切な)BLOBCLOBまたはNCLOB列にコピーします。

一時LOBインスタンスを終了したら、FREETEMPORARYプロシージャを使用してそれを解放します。

セキュリティは、LOBロケータを介して提供されます。一時LOBは、その作成ユーザーのみ参照できます。ロケータは、あるユーザーのセッションから別のユーザーのセッションに渡すことはできません。あるセッションから別のセッションにロケータを渡しても、元のセッションの一時LOBにはアクセスできません。

一時LOBに固有の注意事項は次のとおりです。


例外

表2-3 DBMS_LOBの例外

例外 コード 説明

ACCESS_ERROR

22925

LOBに書き込もうとしているデータ量が多すぎます。TimesTenでは、BLOBのサイズは16 MBに、CLOBまたはNCLOBのサイズは4 MBに制限されています。

BUFFERING_ENABLED

22279

LOBバッファを有効にした状態では操作を実行できません。

CONTENTTYPE_TOOLONG

43859

contenttype文字列の長さが、定義されている最大長を超えています。contenttype文字列の長さを変更し、操作を再試行してください。

CONTENTTYPEBUF_WRONG

43862

contenttypeバッファの長さが、定義されている定数より短くなっています。contenttypeバッファの長さを変更し、操作を再試行してください。

INVALID_ARGVAL

21560

引数はNULL以外の有効な値である必要がありますが、転送された引数値はNULL、無効または範囲外です。

NO_DATA_FOUND

1403

これは、ループ読取り操作でLOBの終了を示すインジケータです。ハード・エラーではありません。

QUERY_WRITE

14553

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

VALUE_ERROR

6502

これは、サブプログラムのパラメータ値が無効なためのPL/SQLエラーです。



注意:

DBMS_LOBサブプログラムの「例外」の項で説明するとおり、LOBバッファリングが有効の場合は動作しないサブプログラムがいくつかあります。(LOBバッファリングとは、たとえばOCIなどを介して有効にできる機能です。『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』のLOBバッファリング・サブシステムに関する説明を参照してください。


DBMS_LOBサブプログラムの要約

表2-4 DBMS_LOBのサブプログラム

サブプログラム 説明

APPENDプロシージャ


ソースLOBの内容を宛先LOBに追加します。

CLOSEプロシージャ


オープンされているLOBをクローズします。

COMPAREファンクション


2つのLOB全体、または2つのLOBの一部を比較します。

CONVERTTOBLOBプロシージャ


ソースCLOBまたはNCLOBから文字データを読み取り、文字データを指定したキャラクタ・セットに変換して、変換したデータをバイナリ形式で宛先BLOBに書き込み、新しいオフセットを戻します。

CONVERTTOCLOBプロシージャ


ソースBLOBを取得し、指定したキャラクタ・セットを使用して、ソースのバイナリ・データを文字データに変換し、文字データを宛先CLOBまたはNCLOBに書き込み、新しいオフセットを戻します。

COPYプロシージャ


ソースLOBの全体または一部を宛先LOBにコピーします。

CREATETEMPORARYプロシージャ


一時データ・パーティションに一時LOBを作成します。

ERASEプロシージャ


LOBの全体または一部を消去します。

FREETEMPORARYプロシージャ


一時データ・パーティションの一時LOBを解放します。

GETCHUNKSIZEファンクション


LOB値を格納するLOBチャンクの使用領域容量を戻します。

GETLENGTHファンクション


LOB値の長さを、BLOBの場合はバイト数で、CLOBの場合は文字数で戻します。

GET_STORAGE_LIMITファンクション


指定したLOBのLOBタイプの格納の上限を戻します。

INSTRファンクション


LOBにおけるパターンのn番目の出現位置を戻します。

ISOPENファンクション


LOBが入力ロケータを使用して、すでにオープンされたかどうかをチェックします。

ISTEMPORARYファンクション


ロケータが一時LOBをポイントしているかどうかをチェックします。

OPENプロシージャ


LOB(永続または一時)を、指定された読取り/書込みまたは読取り専用モードでオープンします。

READプロシージャ


指定されたオフセットからLOBのデータを読み取ります。

SUBSTRファンクション


指定されたオフセットからLOB値の一部を戻します。

TRIMプロシージャ


指定された長さまでLOB値を切り捨てます。

WRITEプロシージャ


指定されたオフセットからLOBにデータを書き込みます。

WRITEAPPENDプロシージャ


バッファをLOBの終了に追加します。



APPENDプロシージャ

このプロシージャでは、ソースLOBの内容を宛先LOBに追加します。ソースLOBを完全に追加します(WRITEAPPENDプロシージャとは混同しないでください。)


注意:

「WRITEAPPENDプロシージャ」も参照してください。

構文

DBMS_LOB.APPEND (
   dest_lob IN OUT  NOCOPY BLOB, 
   src_lob  IN             BLOB); 

DBMS_LOB.APPEND (
   dest_lob IN OUT  NOCOPY CLOB  CHARACTER SET ANY_CS, 
   src_lob  IN             CLOB  CHARACTER SET dest_lob%CHARSET);

パラメータ

表2-5 APPENDプロシージャのパラメータ

パラメータ 説明

dest_lob

データを追加するLOBのロケータ

src_lob

データを読み取るLOBのロケータ


使用上の注意

例外

表2-6 APPENDプロシージャの例外

例外 説明

VALUE_ERROR

ソースまたは宛先LOBのいずれかがNULLです。

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

いずれかのLOBでLOBバッファを有効にした状態では操作を実行できません。


ここでは、APPENDプロシージャの使用例を示します。

create table t1 (a int, c clob);
 
insert into t1(a,c) values(1, 'abcde');
1 row inserted.
 
commit;
 
declare
  c1 clob;
  c2 clob;
begin
  c1 := 'abc';
  select c into c2 from t1 where a = 1;
  dbms_output.put_line('c1 before append is ' || c1);
  dbms_output.put_line('c2 before append is ' || c2);
  dbms_lob.append(c1, c2);
  dbms_output.put_line('c1 after append is ' || c1);
  dbms_output.put_line('c2 after append is ' || c2);
  insert into t1 values (2, c1);
end;
 
c1 before append is abc
c2 before append is abcde
c1 after append is abcabcde
c2 after append is abcde
 
PL/SQL procedure successfully completed.
 
select * from t1;
< 1, abcde >
< 2, abcabcde >
2 rows found.

(SQLスクリプトからコマンドを実行した後、出力が表示されます。)


CLOSEプロシージャ

このプロシージャでは、すでにオープンされているLOBをクローズします。

構文

DBMS_LOB.CLOSE (
   lob_loc    IN OUT NOCOPY BLOB); 

DBMS_LOB.CLOSE (
   lob_loc    IN OUT NOCOPY CLOB CHARACTER SET ANY_CS); 

パラメータ

表2-7 CLOSEプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ


使用上の注意

例外

エラーは、LOBがオープンしていない場合に戻されます。


COMPAREファンクション

このファンクションは、2つのLOB全体、または2つのLOBの一部を比較します。

構文

DBMS_LOB.COMPARE (
   lob_1            IN BLOB,
   lob_2            IN BLOB,
   amount           IN INTEGER := DBMS_LOB.BLOBMAXSIZE,
   offset_1         IN INTEGER := 1,
   offset_2         IN INTEGER := 1)
  RETURN INTEGER;

DBMS_LOB.COMPARE (
   lob_1            IN CLOB  CHARACTER SET ANY_CS,
   lob_2            IN CLOB  CHARACTER SET lob_1%CHARSET,
   amount           IN INTEGER := DBMS_LOB.CLOBMAXSIZE,
   offset_1         IN INTEGER := 1,
   offset_2         IN INTEGER := 1)
  RETURN INTEGER;

パラメータ

表2-8 COMPAREファンクション・パラメータ

パラメータ 説明

lob_1

比較する1番目のLOBのロケータ

lob_2

比較する2番目のLOBのロケータ

amount

比較するバイト数(BLOBの場合)または文字数(CLOBまたはNCLOB)

offset_1

1番目のLOBのバイト数または文字数でのオフセット(起点: 1)

offset_2

2番目のLOBのバイト数または文字数でのオフセット(起点: 1)


戻り値

このファンクションは、次のいずれかを戻します。

使用上の注意


CONVERTTOBLOBプロシージャ

このプロシージャは、ソースCLOBまたはNCLOBから、文字データを読み取り、文字データを指定したキャラクタ・セットに変換して、変換したデータをバイナリ形式で宛先BLOBに書き込み、新しいオフセットを戻します。このプロシージャは、永続LOBまたは一時LOBの任意の組合せで使用できます。

構文

DBMS_LOB.CONVERTTOBLOB(
  dest_lob       IN OUT     NOCOPY  BLOB,
  src_clob       IN         CLOB CHARACTER SET ANY_CS,
  amount         IN         INTEGER,
  dest_offset    IN OUT     INTEGER,
  src_offset     IN OUT     INTEGER, 
  blob_csid      IN         NUMBER,
  lang_context   IN OUT     INTEGER,
  warning        OUT        INTEGER); 

パラメータ

表2-9 CONVERTTOBLOBプロシージャ・パラメータ

パラメータ 説明

dest_lob

宛先LOBのロケータ

src_clob

ソースLOBのロケータ

amount

ソースLOBから変換する文字数

CLOBまたはNCLOB全体を変換する場合、定数CLOBMAXSIZEを渡します。他の値を渡す場合は、LOBのサイズ以下である必要があります。

dest_offset

(IN)宛先LOBの書込み開始位置を示すオフセット(バイト数で指定します)

LOBの先頭から開始するには1の値を指定します。

(OUT)書込み終了位置の次の位置を示す新しいオフセット(バイト数で指定します)

src_offset

(IN)ソースLOBの読込み開始位置を示すオフセット(文字数で指定します)

(OUT)ソースLOBの読込み終了位置の次の位置を示すオフセット(文字数で示します)

blob_csid

変換BLOBデータのキャラクタ・セットID

lang_context

(IN)現行の変換に関する、シフト・ステータスなどの言語コンテキスト(TimesTenでは無視されます)

(OUT)現在の変換が実行されたときの言語コンテキスト(TimesTenでは0に設定されます)

このパラメータは、TimesTenではサポートされていません。

warning

警告メッセージ

このパラメータは、TimesTenではサポートされていません。


使用上の注意

事前条件

CONVERTTOBLOBをコールする前に、次の事前条件を満たしている必要があります。

定数およびデフォルト

すべてのパラメータが必要です。各OUTまたはIN OUTパラメータに変数を渡す必要があります。各INパラメータに変数または値を渡す必要があります。

表2-10に各パラメータの一般的な値の要約を示します。値によっては定数が使用されるので注意してください。このような定数は、dbmslob.sqlパッケージ仕様部ファイルに定義されています。

表2-10 CONVERTTOBLOBの一般的な値

パラメータ 説明

amount

CLOBMAXSIZE (IN)

LOB全体を変換します。

dest_offset

1(IN)

先頭から開始します。

src_offset

1(IN)

先頭から開始します。

blob_csid

DEFAULT_CSID (IN)

デフォルトのキャラクタ・セットID(ソースCLOBと同じIDを使用します)。

lang_context

DEFAULT_LANG_CTX (IN)

これがデフォルトの言語コンテキストです(TimesTenでは無視されます)。

warning

NO_WARNING (OUT)

WARN_INCONVERTIBLE_CHAR (OUT)

これは警告メッセージです(TimesTenでは無視されます)。


一般的な注意

例外

表2-11 CONVERTTOBLOBプロシージャの例外

例外 説明

VALUE_ERROR

入力パラメータのいずれかがNULLまたは無効です。

INVALID_ARGVAL

次のいずれかが該当します。

src_offset < 1またはsrc_offset > CLOBMAXSIZE

dest_offset < 1またはdest_offset > BLOBMAXSIZE

amount < 1またはamount > CLOBMAXSIZE



CONVERTTOCLOBプロシージャ

このプロシージャはソースBLOBを取得し、指定したキャラクタ・セットを使用して、ソースのバイナリ・データを文字データに変換し、文字データを宛先CLOBまたはNCLOBに書き込み、新しいオフセットを戻します。このプロシージャは、永続LOBまたは一時LOBの任意の組合せで使用できます。

構文

DBMS_LOB.CONVERTTOCLOB(
   dest_lob       IN OUT NOCOPY  CLOB CHARACTER SET ANY_CS,
   src_blob       IN             BLOB,
   amount         IN             INTEGER,
   dest_offset    IN OUT         INTEGER,
   src_offset     IN OUT         INTEGER, 
   blob_csid      IN             NUMBER,
   lang_context   IN OUT         INTEGER,
   warning        OUT            INTEGER);

パラメータ

表2-12 CONVERTTOCLOBプロシージャ・パラメータ

パラメータ 説明

dest_lob

宛先LOBのロケータ

src_blob

ソースLOBのロケータ

amount

ソースLOBから変換するバイト数

BLOB全体を変換する場合、定数BLOBMAXSIZEを渡します。他の値を渡す場合は、BLOBのサイズ以下である必要があります。

dest_offset

(IN)宛先LOBの書込み開始位置を示すオフセット(文字数で指定します)

LOBの先頭から開始するには1の値を指定します。

(OUT)書込み終了位置の次の位置を示す新しいオフセット(文字で指定します)

このオフセットは、常に書込み終了位置の後にある最初の完全な文字をポイントします。

src_offset

(IN)ソースLOBの読込み開始位置を示すオフセット(バイト数で指定します)

(OUT)ソースLOBの読込み終了位置の次の位置を示すオフセット(バイト数で示します)

blob_csid

ソースBLOBデータのキャラクタ・セットID

lang_context

(IN)現行の変換に関する、シフト・ステータスなどの言語コンテキスト(TimesTenでは無視されます)

(OUT)現在の変換が実行されたときの言語コンテキスト(TimesTenでは0に設定されます)

このパラメータは、TimesTenではサポートされていません。

warning

警告メッセージ

このパラメータは、TimesTenではサポートされていません。


使用上の注意

事前条件

CONVERTTOCLOBをコールする前に、次の事前条件を満たしている必要があります。

定数およびデフォルト

すべてのパラメータが必要です。各OUTまたはIN OUTパラメータに変数を渡す必要があります。各INパラメータに変数または値を渡す必要があります。

表2-13に各パラメータの一般的な値の要約を示します。値によっては定数が使用されるので注意してください。このような定数は、dbmslob.sqlパッケージ仕様部ファイルに定義されています。

表2-13 CONVERTTOCLOBの一般的な値

パラメータ 説明

amount

BLOBMAXSIZE (IN)

LOB全体を変換します。

dest_offset

1(IN)

先頭から開始します。

src_offset

1(IN)

先頭から開始します。

blob_csid

DEFAULT_CSID (IN)

デフォルトのキャラクタ・セットID(宛先CLOBと同じIDを使用します)。

lang_context

DEFAULT_LANG_CTX (IN)

これがデフォルトの言語コンテキストです(TimesTenでは無視されます)。

warning

NO_WARNING (OUT)

WARN_INCONVERTIBLE_CHAR (OUT)

これは警告メッセージです(TimesTenでは無視されます)。


一般的な注意

例外

表2-14 CONVERTTOCLOBプロシージャの例外

例外 説明

VALUE_ERROR

入力パラメータのいずれかがNULLまたは無効です。

INVALID_ARGVAL

次のいずれかが該当します。

src_offset < 1またはsrc_offset > BLOBMAXSIZE

dest_offset < 1またはdest_offset > CLOBMAXSIZE

amount < 1またはamount > BLOBMAXSIZE



COPYプロシージャ

このプロシージャでは、ソースLOBの全体または一部を宛先LOBにコピーします。ソースおよび宛先の両方のLOBに対するオフセット、およびコピーするバイト数または文字数を指定できます。

構文

DBMS_LOB.COPY (
  dest_lob    IN OUT NOCOPY BLOB,
  src_lob     IN            BLOB,
  amount      IN            INTEGER,
  dest_offset IN            INTEGER := 1,
  src_offset  IN            INTEGER := 1);

DBMS_LOB.COPY ( 
  dest_lob    IN OUT NOCOPY CLOB  CHARACTER SET ANY_CS,
  src_lob     IN            CLOB  CHARACTER SET dest_lob%CHARSET,
  amount      IN            INTEGER,
  dest_offset IN            INTEGER := 1,
  src_offset  IN            INTEGER := 1);

パラメータ

表2-15 COPYプロシージャ・パラメータ

パラメータ 説明

dest_lob

コピーする宛先LOBのロケータ

src_lob

コピー元のソースLOBのロケータ

amount

コピーするバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

dest_offset

宛先LOBのコピー開始位置を示すオフセット(起点: 1)(バイト数または文字数で指定します)

src_offset

ソースLOBのコピー開始位置を示すオフセット(起点: 1)(バイト数または文字数で指定します)


使用上の注意

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-16  COPYプロシージャの例外

例外 説明

VALUE_ERROR

入力パラメータのいずれかがNULLまたは無効です。

INVALID_ARGVAL

次のいずれかが該当します。

src_offset < 1またはsrc_offset >最大LOBサイズ

dest_offset < 1またはdest_offset >最大LOBサイズ

amount < 1またはamount >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

いずれかのLOBでLOBバッファを有効にした状態では操作を実行できません。


この項の例では、PL/SQLでLOBをコピーする方法、パススルーLOB(Oracle Databaseから)とTimesTen LOB間でLOBをコピーする方法を示します。1番目の例では、COPYプロシージャを使用します。2番目では、DBMS_LOBパッケージの機能も使用しますが、対照的に単純にINSERTUPDATE文を使用します。

COPYプロシージャを使用したCLOBのコピー

この例では、COPYプロシージャを使用し、Oracle DatabaseからパススルーCLOBをTimesTen CLOBにまずコピーし、TimesTen CLOBをパススルーCLOBにコピーします。

autocommit 0;
passthrough 0;
DROP TABLE tt_table; CREATE TABLE tt_table (i INT, c CLOB); COMMIT;
passthrough 3;
DROP TABLE ora_table; CREATE TABLE ora_table (i INT, c CLOB); COMMIT;
passthrough 0;
set serveroutput on;
 
DECLARE
  passthru_clob CLOB;
  tt_clob CLOB;
  clob_length BINARY_INTEGER;
  clob_buffer VARCHAR2(80);

BEGIN
  EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 1)';
 
  -- Note that in PL/SQL, passthrough statements must be executed as
  -- dynamic SQL, and SELECT INTO must be used to assign a passthrough LOB.
 
  -- 1. Copy a passthrough CLOB on Oracle Database to a TimesTen CLOB
  -- On Oracle Database : insert a row with an empty CLOB, get a passthrough CLOB
  -- handle, and append to the passthrough CLOB.
  EXECUTE IMMEDIATE 'INSERT INTO ora_table VALUES (1, EMPTY_CLOB())';
  EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 1 FOR UPDATE' 
                     INTO passthru_clob; 
  DBMS_LOB.APPEND(passthru_clob, 'Copy from Oracle Database to TimesTen');
  clob_length := DBMS_LOB.GETLENGTH(passthru_clob);
 
  -- On TimesTen: insert a row with an empty CLOB, and get a TimesTen CLOB handle
  INSERT INTO tt_table VALUES (1, EMPTY_CLOB()) RETURNING c INTO tt_clob;
 
  -- Copy the passthrough CLOB on Oracle Database to a TimesTen CLOB
  DBMS_LOB.COPY(tt_clob, passthru_clob, clob_length, 1, 1);
 
  -- On TimesTen: display the modified TimesTen CLOB
  DBMS_LOB.READ(tt_clob, clob_length, 1, clob_buffer);
  DBMS_OUTPUT.PUT_LINE(clob_buffer);
 
  -- 2. Copy a TimesTen CLOB to a passthrough CLOB on Oracle Database
  -- On TimesTen: insert a row with LOB data, and get a TimesTen CLOB handle
  INSERT INTO tt_table VALUES (2, 'Copy from TimesTen to Oracle Database.') 
         RETURNING c INTO tt_clob;
  clob_length := DBMS_LOB.GETLENGTH(tt_clob);
 
  -- On Oracle Database: insert a row with an empty CLOB, and get a passthrough
  -- CLOB handle
  EXECUTE IMMEDIATE 'INSERT INTO ora_table VALUES (2, EMPTY_CLOB())';
  EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 2 FOR UPDATE' 
                     INTO passthru_clob ; 
 
  -- Copy a TimesTen CLOB to a passthrough CLOB on Oracle Database
  DBMS_LOB.COPY(passthru_clob, tt_clob, clob_length, 1, 1);
 
  -- On Oracle Database: display the modified passthrough CLOB
  DBMS_LOB.READ(passthru_clob, clob_length, 1, clob_buffer);
  DBMS_OUTPUT.PUT_LINE(clob_buffer);
 
  COMMIT;
  EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 0)';
END;

INSERTおよびUPDATE文を使用したCLOBのコピー

Oracle DatabaseからのパススルーLOBは、TimesTenの表に対して実行するINSERTまたはUPDATE文とバインドできます。この方法で、パススルーLOBをTimesTen LOBにコピーできます。同様に、TimesTen LOBは、Oracle Databaseの表に対して実行するINSERTまたはUPDATE文とバインドできます。この方法で、TimesTen LOBをパススルーLOBにコピーできます。

この例では、これらの両方のシナリオを示しています。

autocommit 0;
passthrough 0;
DROP TABLE tt_table; CREATE TABLE tt_table (i INT, c CLOB); COMMIT;
passthrough 3;
DROP TABLE ora_table; CREATE TABLE ora_table (i INT, c CLOB); COMMIT;
passthrough 0;
set serveroutput on;
 
DECLARE
  passthru_clob CLOB;
  tt_clob CLOB;
  clob_length BINARY_INTEGER;
  clob_buffer VARCHAR2(80);

BEGIN
  EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 1)';
 
  -- Note that in PL/SQL, passthrough statements must be executed as
  -- dynamic SQL, and SELECT INTO must be used to assign a passthrough LOB.
 
  -- 1. A TimesTen CLOB is updated with a passthrough CLOB on Oracle Database
  -- On TimesTen: insert a row with a NULL CLOB value
  INSERT INTO tt_table VALUES (1, NULL);
 
  -- On Oracle Database: insert a row with an empty CLOB, get a passthrough CLOB
  -- handle
  EXECUTE IMMEDIATE 'INSERT INTO ora_table 
                     VALUES (1, ''Copy from Oracle Database to TimesTen'')';
  EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 1' INTO passthru_clob ; 
 
  -- On TimesTen: update the TimesTen CLOB with the passthrough CLOB
  UPDATE tt_table SET c = passthru_clob where i = 1;
 
  -- On TimesTen: display the modified TimesTen CLOB
  SELECT c INTO tt_clob FROM tt_table WHERE i = 1;
  clob_length := DBMS_LOB.GETLENGTH(tt_clob);
  DBMS_LOB.READ(tt_clob, clob_length, 1, clob_buffer);
  DBMS_OUTPUT.PUT_LINE(clob_buffer);
 
  -- 2. A passthrough table on Oracle Database is inserted with a TimesTen CLOB
  -- On TimesTen: insert a row with a CLOB value, and get a TimesTen CLOB handle
  INSERT INTO tt_table VALUES (2, 'Copy from TimesTen to Oracle Database.') 
                       RETURNING c INTO tt_clob;
 
  -- On Oracle Database: insert a row on Oracle Database with the TimesTen CLOB
  EXECUTE IMMEDIATE 'INSERT INTO ora_table VALUES (2, :1)' USING tt_clob;
 
  -- On Oracle Database: display the modified passthrough CLOB
  EXECUTE IMMEDIATE 'SELECT c FROM ora_table WHERE i = 2' INTO passthru_clob; 
  clob_length := DBMS_LOB.GETLENGTH(passthru_clob);
  DBMS_LOB.READ(passthru_clob, clob_length, 1, clob_buffer);
  DBMS_OUTPUT.PUT_LINE(clob_buffer);
 
  COMMIT;
  EXECUTE IMMEDIATE 'call ttoptsetflag(''passthrough'', 0)';
END;

CREATETEMPORARYプロシージャ

このプロシージャは、一時データ・パーティションに一時BLOB、CLOBまたはNCLOBを作成します。

一時LOBの使用が終了したら、FREETEMPORARYプロシージャを使用します。


重要:

TimesTenでは、一時LOBを作成すると、データベース・トランザクションがまだ進行していない場合は、データベース・トランザクションが作成されます。トランザクションを終了するには、コミットまたはロールバックを実行する必要があります。

構文

DBMS_LOB.CREATETEMPORARY (
   lob_loc IN OUT NOCOPY BLOB,
   cache   IN            BOOLEAN,
   dur     IN            BINARY_INTEGER := DBMS_LOB.SESSION);
  
DBMS_LOB.CREATETEMPORARY (
   lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
   cache   IN            BOOLEAN,
   dur     IN            BINARY_INTEGER := DBMS_LOB.SESSION);

パラメータ

表2-17 CREATETEMPORARYプロシージャ・パラメータ

パラメータ 説明

lob_loc

一時LOBのロケータ

CLOBロケータのかわりにNCLOBロケータを指定することが許可されています。適切なキャラクタ・セットが使用されます。

cache

LOBをバッファ・キャッシュに読み込むかどうかを示すフラグ

dur

一時LOBをいつクリーン・アップするかのヒントを指定する、SESSIONまたはCALLの2つの事前定義された期間値の1つ

注意: いずれの設定も許可されますが、TimesTenではトランザクションが終了するとLOBロケータの継続時間が終了します。


使用上の注意


ERASEプロシージャ

このプロシージャでは、LOBの全体または一部を消去します。


注意:

「TRIMプロシージャ」も参照してください。

構文

DBMS_LOB.ERASE (
   lob_loc           IN OUT   NOCOPY   BLOB,
   amount            IN OUT   NOCOPY   INTEGER,
   offset            IN                INTEGER := 1);

DBMS_LOB.ERASE (
   lob_loc           IN OUT   NOCOPY   CLOB CHARACTER SET ANY_CS,
   amount            IN OUT   NOCOPY   INTEGER,
   offset            IN                INTEGER := 1);

パラメータ

表2-18 ERASEプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

amount

(IN)消去するバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

(OUT)実際に消去されたバイト数

offset

LOBの先頭からの絶対オフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)


使用上の注意


注意:

LOBの長さは、LOBのセクションを消去しても減りません。LOBの長さを減らす方法は、「TRIMプロシージャ」を参照してください。

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-19 ERASEプロシージャの例外

例外 説明

VALUE_ERROR

入力パラメータのいずれかがNULLです。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount >最大LOBサイズ

offset < 1またはoffset >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。



FREETEMPORARYプロシージャ

このプロシージャは、一時データ・パーティションの一時BLOB、CLOBまたはNCLOBを解放します。

CREATETEMPORARYプロシージャに関する説明も参照してください。

構文

DBMS_LOB.FREETEMPORARY (
   lob_loc  IN OUT  NOCOPY BLOB); 

DBMS_LOB.FREETEMPORARY (
   lob_loc  IN OUT  NOCOPY CLOB CHARACTER SET ANY_CS); 

パラメータ

表2-20 FREETEMPORARYプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ


使用上の注意


GETCHUNKSIZEファンクション

TimesTenではこの機能をサポートしておらず、単純に値32Kを相互運用性のために戻します。この値は、TimesTenアプリケーションのパフォーマンスのチューニングには関係しません。(Oracle Databaseの機能については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のGETCHUNKSIZEファンクションに関する説明を参照してください。)

構文

DBMS_LOB.GETCHUNKSIZE (
   lob_loc IN BLOB) 
  RETURN INTEGER; 

DBMS_LOB.GETCHUNKSIZE (
   lob_loc IN CLOB CHARACTER SET ANY_CS) 
  RETURN INTEGER; 

パラメータ

表2-21 GETCHUNKSIZEファンクション・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ


戻り値

値32Kは戻されますが、この数値に依存してアプリケーションのパフォーマンスのチューニングはしないようにする必要があります。

例外

表2-22 GETCHUNKSIZEプロシージャの例外

例外 説明

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。



GETLENGTHファンクション

このファンクションでは指定したLOBの長さをバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)で戻します。

構文

DBMS_LOB.GETLENGTH (
   lob_loc    IN  BLOB) 
  RETURN INTEGER;
 
DBMS_LOB.GETLENGTH (
   lob_loc    IN  CLOB   CHARACTER SET ANY_CS) 
  RETURN INTEGER;

パラメータ

表2-23 GETLENGTHファンクションのパラメータ

パラメータ 説明

lob_loc

LOBのロケータ


戻り値

LOB値の長さを、バイト数または文字数のINTEGER値で戻します。入力LOBまたはlob_locNULLの場合、NULLが戻されます。

使用上の注意

例外

表2-24 GETLENGTHプロシージャの例外

例外 説明

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。


次の例は、GETLENGTHファンクションの使用方法を示します。

create table t1 (a int, b blob, c clob);
 
insert into t1(a,b,c) values(1, 0x123451234554321, 'abcde');
1 row inserted.
 
commit;
 
declare
  myblob blob;
  i integer;
begin
  myblob := empty_blob();
  i := dbms_lob.getlength(myblob);
  dbms_output.put_line('Length of BLOB before SELECT: ' || i);
  select b into myblob from t1 where a=1;
  i := dbms_lob.getlength(myblob);
  dbms_output.put_line('Length of BLOB after SELECT: ' || i);
end;
 
Length of BLOB before SELECT: 0
Length of BLOB after SELECT: 8
 
PL/SQL procedure successfully completed.

(SQLスクリプトからコマンドを実行した後、出力が表示されます。)


GET_STORAGE_LIMITファンクション

このファンクションは、指定したLOBのタイプの記憶域制限をバイト数で戻します。

構文

DBMS_LOB.GET_STORAGE_LIMIT (
   lob_loc  IN CLOB CHARACTER SET ANY_CS)
 RETURN INTEGER; 

DBMS_LOB.GET_STORAGE_LIMIT (
   lob_loc  IN BLOB)
 RETURN INTEGER; 

パラメータ

表2-25 GET_STORAGE_LIMITファンクション・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ


戻り値

TimesTenでは、指定したLOBのタイプのバイト単位での最大の記憶域容量値が単純に戻されます。つまり、BLOBの場合は16777216(16 MB)でCLOBまたはNCLOBの場合は4194304(4 MB)です。


INSTRファンクション

このファンクションは、指定したオフセットを開始位置として、指定したLOBにおける指定したパターンのn番目に一致した位置を戻します。


注意:

「SUBSTRファンクション」も参照してください。

構文

DBMS_LOB.INSTR (
   lob_loc    IN   BLOB,
   pattern    IN   RAW,
   offset     IN   INTEGER := 1,
   nth        IN   INTEGER := 1)
  RETURN INTEGER;

DBMS_LOB.INSTR (
   lob_loc    IN   CLOB      CHARACTER SET ANY_CS,
   pattern    IN   VARCHAR2  CHARACTER SET lob_loc%CHARSET,
   offset     IN   INTEGER := 1,
   nth        IN   INTEGER := 1)
  RETURN INTEGER;

パラメータ

表2-26 INSTRファンクション・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

pattern

テストするパターン

このパターンは、BLOBの場合はRAWバイトで、CLOBまたはNCLOBの場合は文字列(VARCHAR2)です。このパターンの最大サイズは16383バイトです。

offset

パターン・マッチングの開始位置を示す絶対オフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

nth

LOB内でパターンが何回目に出現するか(起点: 1)。


戻り値

このファンクションは、次のいずれかを戻します。

使用上の注意


ISOPENファンクション

このファンクションは、LOBが入力ロケータを使用してすでにオープンされているかどうかをチェックします。

構文

DBMS_LOB.ISOPEN (
   lob_loc IN BLOB) 
  RETURN INTEGER; 

DBMS_LOB.ISOPEN (
   lob_loc IN CLOB CHARACTER SET ANY_CS) 
  RETURN INTEGER;

パラメータ

表2-27 ISOPENファンクション・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ


戻り値

戻り値は、LOBがオープンしている場合は1、していない場合は0(ゼロ)です。

使用上の注意


ISTEMPORARYファンクション

このファンクションはLOBが一時的であるかどうかを判断します。

構文

DBMS_LOB.ISTEMPORARY (
   lob_loc IN BLOB)
  RETURN INTEGER;
 
DBMS_LOB.ISTEMPORARY (
   lob_loc IN CLOB CHARACTER SET ANY_CS)
  RETURN INTEGER;

パラメータ

表2-28 ISTEMPORARYプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ


戻り値

戻り値は、LOBが存在し一時LOBである場合は1、LOBが存在しないか一時LOBではない場合は0(ゼロ)、また指定されたロケータ値がNULLの場合はNULLです。

使用上の注意


OPENプロシージャ

このプロシージャでは、LOBを指定された読取り専用または読取り/書込みモードでオープンします。

構文

DBMS_LOB.OPEN (
   lob_loc   IN OUT NOCOPY BLOB,
   open_mode IN            BINARY_INTEGER);
 
DBMS_LOB.OPEN (
   lob_loc   IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
   open_mode IN            BINARY_INTEGER);

パラメータ

表2-29 OPENプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

open_mode

オープンするLOB_READONLYまたはLOB_READWRITEのいずれかのモード


使用上の注意


READプロシージャ

このプロシージャは、指定したLOBの先頭からの絶対オフセットから開始するLOBの一部を読み取り、bufferパラメータに、(BLOBの場合は)指定されたバイト数を戻し、(CLOBまたはNCLOBの場合は)文字数を戻します。

構文

DBMS_LOB.READ (
   lob_loc   IN             BLOB,
   amount    IN OUT  NOCOPY INTEGER,
   offset    IN             INTEGER,
   buffer    OUT            RAW);

DBMS_LOB.READ (
   lob_loc   IN             CLOB CHARACTER SET ANY_CS,
   amount    IN OUT  NOCOPY INTEGER,
   offset    IN             INTEGER,
   buffer    OUT            VARCHAR2 CHARACTER SET lob_loc%CHARSET); 

パラメータ

表2-30 READプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

amount

(IN)読み込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

(OUT)実際に読み込まれたバイト数または文字数

offset

LOBの先頭からのオフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

buffer

読取り操作からの出力バッファ


使用上の注意

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-31 READプロシージャの例外

例外 説明

VALUE_ERROR

lob_locamountまたはoffsetのいずれかがNULLです。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount > 32767バイト(または同等の文字)またはbuffer容量

offset < 1またはoffset >最大LOBサイズ

NO_DATA_FOUND

LOBの終了に達し、LOBにはこれ以上読み取るバイトまたは文字がありません。amountパラメータの値が0(ゼロ)です。



SUBSTRファンクション

このファンクションでは、指定したLOBの先頭からの指定したオフセットから開始する指定されたバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)を戻します。


注意:

「INSTRファンクション」および「READプロシージャ」も参照してください。

構文

DBMS_LOB.SUBSTR (
   lob_loc     IN    BLOB,
   amount      IN    INTEGER := 32767,
   offset      IN    INTEGER := 1)
  RETURN RAW;

DBMS_LOB.SUBSTR (
   lob_loc     IN    CLOB   CHARACTER SET ANY_CS,
   amount      IN    INTEGER := 32767,
   offset      IN    INTEGER := 1)
  RETURN VARCHAR2 CHARACTER SET lob_loc%CHARSET;

パラメータ

表2-32 SUBSTRファンクション・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

amount

読み込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

offset

LOBの先頭からのオフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)


戻り値

次のいずれかを戻します。

使用上の注意


TRIMプロシージャ

このプロシージャは、newlenパラメータで指定した長さにLOBを切り捨てます。新しい必要なデータ長をBLOBの場合はバイト数で、CLOBまたはNCLOBの場合は文字数で指定します。


注意:

「ERASEプロシージャ」および「WRITEAPPENDプロシージャ」も参照してください。

構文

DBMS_LOB.TRIM (
   lob_loc        IN OUT  NOCOPY BLOB,
   newlen         IN             INTEGER);

DBMS_LOB.TRIM (
   lob_loc        IN OUT  NOCOPY CLOB CHARACTER SET ANY_CS,
   newlen         IN             INTEGER);

パラメータ

表2-33 TRIMプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

newlen

目的の切捨て後のLOB値の長さ(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)


使用上の注意

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-34 TRIMプロシージャの例外

例外 説明

VALUE_ERROR

lob_loc値がNULLです。

INVALID_ARGVAL

次のいずれかが該当します。

newlen < 0またはnewlen >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。



WRITEプロシージャ

このプロシージャは、LOBの先頭からの指定した絶対オフセットから開始し、指定された量のデータをLOBに書き込みます。データは、bufferパラメータから書き込まれます。

WRITEは、オフセット位置以降LOBにすでに存在しているデータを、指定した長さだけ置換(上書き)します。


注意:

「COPYプロシージャ」および「WRITEAPPENDプロシージャ」も参照してください。

構文

DBMS_LOB.WRITE (
   lob_loc  IN OUT NOCOPY  BLOB,
   amount   IN             INTEGER,
   offset   IN             INTEGER,
   buffer   IN             RAW);

DBMS_LOB.WRITE (
   lob_loc  IN OUT  NOCOPY CLOB   CHARACTER SET ANY_CS,
   amount   IN             INTEGER,
   offset   IN             INTEGER,
   buffer   IN             VARCHAR2 CHARACTER SET lob_loc%CHARSET); 

パラメータ

表2-35 WRITEプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

amount

書き込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

offset

LOBの先頭からの書込み操作のオフセット(起点: 1)(BLOBの場合はバイト数、CLOBまたはNCLOBの場合は文字数で指定します)

buffer

書込み用データの入力バッファ


使用上の注意

例外

最大LOBサイズはBLOBの場合はBLOBMAXSIZEで、CLOBの場合はCLOBMAXSIZEです。

表2-36 WRITEプロシージャの例外

例外 説明

VALUE_ERROR

lob_locamountまたはoffsetNULLであるか、範囲外であるか、無効です。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount > 32767バイト(または同等の文字)またはbufferの容量

offset < 1またはoffset >最大LOBサイズ

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。



WRITEAPPENDプロシージャ

このプロシージャは、指定された量のデータをLOBの後ろ追加します。データは、bufferパラメータから書き込まれます。(APPENDプロシージャとは混同しないでください。)

構文

DBMS_LOB.WRITEAPPEND (
   lob_loc IN OUT NOCOPY BLOB, 
   amount  IN            INTEGER, 
   buffer  IN            RAW); 

DBMS_LOB.WRITEAPPEND (
   lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS, 
   amount  IN            INTEGER, 
   buffer  IN            VARCHAR2 CHARACTER SET lob_loc%CHARSET); 

パラメータ

表2-37 WRITEAPPENDプロシージャ・パラメータ

パラメータ 説明

lob_loc

LOBのロケータ

amount

書き込むバイト数(BLOBの場合)または文字数(CLOBまたはNCLOBの場合)

buffer

書込み用データの入力バッファ


使用上の注意

例外

表2-38 WRITEAPPENDプロシージャの例外

例外 説明

VALUE_ERROR

lob_locamountまたはoffsetがnullであるか、範囲外であるか、無効です。

INVALID_ARGVAL

次のいずれかが該当します。

amount < 1またはamount > 32767バイト(または同等の文字)またはbufferの容量

QUERY_WRITE

問合せ内でLOB書込みを実行できません(これはTimesTenでは実行できません。)

BUFFERING_ENABLED

LOBでLOBバッファを有効にした状態では操作を実行できません。