Example - Inserting LOB data

Top  Previous  Next

2つの状況下でテーブルに新しいLOBデータを挿入する必要が出てきます:

1.        新しいレコードを挿入する
2.        LOBカラムの古い値がnullであるレコードを更新する。この場合、そのレコードはデータを書くために使うLOB Locatorを持たないものになります。

もしtemporary LOBを使っていないのなら、まずレコードに空のLOB Locatorを挿入/更新しなくてはいけません。 そうするために、挿入や更新命令中でSQL命令のempty_blob()empty_clob()を使います。サーバー上ではLOB Locatorは初期化されます。初期化されたLOB Locatorは新しいOracle8returning節を使って変数内のクライアントへ返されます。 このあとからLOBカラムにデータを書き込むことが出来るようになります。LOB変数を設定するにはSetComplexVariableを使わなければなりません。

次は挿入のサンプルプログラムです:

var LOB: TLOBLocator;

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

begin

// insert into lobtable (id, lobcolumn) values (:id, empty_blob())

//   returning lobcolumn into :lobcolumn

with LOBQuery do

begin

   SetVariable('id', 1);

   // Create a new BLOB (initially Null)

   LOB := TLOBLocator.Create(Session, otBLOB);

   // Assign it to the returning variable

   SetComplexVariable('lobcolumn', LOB);

   Execute;

   // After the insert, use the LOB Locator to write the data

   LOB.Write(Buffer, 100);

   LOB.Free;

end;

end;

 

もし一時的なLOBを使っている場合、クエリーを実行する前にLOBデータを書くことができ、returning節なしに直接挿入や更新のためにこのLOBデータを使うことが出来ます:

var LOB: TLOBLocator;

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

begin

// insert into lobtable (id, lobcolumn) values (:id, :lobcolumn)

with LOBQuery do

begin

   SetVariable('id', 1);

   // Create a new temporary BLOB and write the data

   LOB := TLOBLocator.CreateTemporary(Session, otBLOB, True);

   LOB.Write(Buffer, 100);

   // Assign it to the returning variable

   SetComplexVariable('lobcolumn', LOB);

   // Insert it

   Execute;

   LOB.Free;

end;

end;