Example - Selecting a LOB Locator

Top  Previous  Next

もうひとつのLOBカラムを持ったselect命令を実行したあと、Fieldメソッドを使ってデータにアクセスすることが出来ます。 CLOBは文字列として返され、BLOBBfileはバイトのゼロベースバリアント配列として返されます。GetLongField メソッドを使ってLOBデータの特定の一部にアクセスすることが出来ます。 これら全てはLongLong Rawカラムにアクセスするのと全く同じです。 LOBの実際のデータは、それにアクセスした瞬間サーバーからフェッチされるだけです。データは先読みされず、クライアント上にバッファされることもありません。

選択されたLOBカラムのLOB Locatorを取得することも出来ます。 そうするためにTOracleQuery LOBFieldメソッドを使ってください。このメソッドはパラメーターとしてLOBフィールドの名前かインデックスを取ります。そしてLOBにアクセスするため使うことのできるTLOBLocatorインスタンスを返します。 TLOBLocator IsNulメソッドを使うことによってLOBカラムがnullかどうかをテストすることが出来ます。もしそれがnullならば、LOBデータにアクセス出来ません。

TLOBLocatorオブジェクトはTstreamの子孫なので、LOBのデータを取得するために慣れ親しんだSeek, ReadSizeメソッドを使うことが出来ます。次はLOBの最後の100バイトを取得する方法のサンプルです:

var LOB: TLOBLocator;

   Buffer: array[0..99] of Byte;

begin

// select lobcolumn from lobtable where id = 1

with LOBQuery do

begin

   Execute;

   LOB := LOBField('lobcolumn');

   if not LOB.IsNull then

   begin

     LOB.Seek(-100, soFromEnd);

     LOB.Read(Buffer, 100);

   end;

end;

end;