バイナリー・ラージ・オブジェクト (BLOB)、文字ラージ・オブジェクト (CLOB)、および 2 バイト文字ラージ・オブジェクト (DBCLOB) が、LOB ロケーターと LOB ファイルの概念とともに、現在では、プリプロセッサーによって認識されます。これらの詳細については、DB2 マニュアルを参照してください。
LOB、CLOB、および BLOB は、最大で 2,147,483,640 バイト (2 ギガバイトから PL/I オーバーヘッドの 8 バイトを引いた値) の長さにすることができます。2 バイト CLOB は、1,073,741,820 文字 (1 ギガバイトから PL/I オーバーヘッドの 4 文字を引いた値) の長さにすることができます。BLOB、CLOB、および DBCLOB は、以下の構文 (ラージ・オブジェクト列、ロケーター、およびファイルに対する PL/I 変数) を使用して、PL/I プログラム内で宣言することができます。
>>-+-Declare-+--PL/I host identifier----------------------------> '-Dcl-----' >--SQL TYPE IS-| PL/I LOB type |--| PL/I LOB type: |------------> >--+-+-+-Binary Large Object-+----+--(--length--+---+--)-+----->< | | '-BLOB----------------' | +-K-+ | | +-+-Character Large Object-+-+ +-M-+ | | | +-Char Large Object------+ | '-G-' | | | '-CLOB-------------------' | | | '-DBCLOB---------------------' | +-+-BLOB (ロケーターとして)---+-----------------------+ | +-CLOB (ロケーターとして)---+ | | '-DBCLOB (ロケーターとして)-' | '-+-BLOB (ファイルとして)---+-------------------------' +-CLOB (ファイルとして)---+ '-DBCLOB (ファイルとして)-'
例えば、次のように宣言したとします。
Dcl my-identifier-name SQL TYPE IS lob-type-name (length);
SQL プリプロセッサーは、この宣言を次の構造体に変換します。
Define structure
1 lob-type-name_length,
2 Length unsigned fixed bin(31),
2 Data(length) char(1);
Dcl my-identifier-name TYPE lob-type-name_length;この構造体の中で、my-identifier-name は PL/I ホスト ID の 名前、lob-type-name_length は LOB のタイプと長さからなる、プリプロセッサーが生成した名前です。
DBCLOB データ型の場合、生成される構造体は次のように少し異なります。
Define structure
1 lob-type-name_length,
2 Length unsigned fixed bin(31),
2 Data(length) type wchar_t;この場合、type wchar_t は、インクルード・メンバー sqlsystm.cpy 内で定義されます。 このメンバーは、DBCLOB データ型を使用するためにはインクルードする必要があります。
例えば、次のように宣言したとします。
Dcl my-identifier-name SQL TYPE IS lob-type AS LOCATOR;
SQL プリプロセッサーは、この宣言を次のコードに変換します。
Define alias lob-type_LOCATOR fixed bin(31) unsigned; Dcl my-identifier-name TYPE lob-type_LOCATOR;
この例の中で、my-identifier-name は PL/I ホスト ID、lob-type_LOCATOR は LOB のタイプとストリング LOCATOR からなる、プリプロセッサーが生成した名前です。
例えば、以下の宣言文を考えてみます。
Dcl my-identifier-name SQL TYPE IS lob-type AS FILE;
SQL プリプロセッサーは、以下のように宣言文を変換します。
Define structure
1 lob-type_FILE,
2 Name_Length unsigned fixed bin(31),
2 Data_Length unsigned fixed bin(31),
2 File_Options unsigned fixed bin(31),
2 Name char(255);
Dcl my-identifier-name TYPE lob-type_FILE;この場合も、my-identifier-name は PL/I ホスト ID、lob-type_FILE は LOB のタイプとストリング FILE からなる、プリプロセッサーが生成した名前です。
次の例は、サンプルの PL/I 変数宣言と、LOB サポートのための対応する変換を示しています。
Dcl my_blob SQL TYPE IS blob(2000);
変換後:
Define structure
1 blob_2000,
2 Length unsigned fixed bin(31),
2 Data(2000) char(1);
Dcl my_blob type blob_2000;
Dcl my_dbclob SQL TYPE IS DBCLOB(1M);
変換後:
Define structure
1 dbclob_1m,
2 Length unsigned fixed bin(31),
2 Data(1048576) type wchar_t;
Dcl my_dbclob type dbclob_1m ;
Dcl my_clob_locator SQL TYPE IS clob as locator;
変換後:
Define alias clob_locator fixed bin(31) unsigned; Dcl my_clob_locator type clob_locator;
Dcl my_blob_file SQL TYPE IS blob as file;
変換後:
Define structure
1 blob_FILE,
2 Name_Length unsigned fixed bin(31),
2 Data_Length unsigned fixed bin(31),
2 File_Options unsigned fixed bin(31),
2 Name char(255);
Dcl my_blob_file type blob_file;
Dcl my_dbclob_file SQL TYPE IS dbclob as file;
変換後:
Define structure
1 dbclob_FILE,
2 Name_Length unsigned fixed bin(31),
2 Data_Length unsigned fixed bin(31),
2 File_Options unsigned fixed bin(31),
2 Name char(255);
Dcl my_dbclob_file type dbclob_file;