LOBS、CLOBS、および BLOBS は、最大で 2,147,483,647 バイト (2 ギガバイト) の 長さにすることができます。2 バイト CLOBS は、1,073,741,823 文字 (1 ギガバイト) の長さに することができます。
例えば、次のように宣言したとします。
DCL my-identifier-name SQL TYPE IS lob-type-name (length);
SQL プリプロセッサーは、LOB() プリコンパイラー・オプションの設定 に応じて、この宣言を以下の構造体の 1 つに変換します。LOB(DB2) が指定され、LOB サイズが 32767 バイト以下である場合、生成される 構造体は、以下のようになります。
DCL
/*$*$*$
SQL TYPE IS lob-type-name (length)
$*$*$*/
1 my-identifier-name,
3 my-identifier-name_LENGTH FIXED BIN(31),
3 my-identifier-name_DATA CHAR(size1);LOB(DB2) が指定され、サイズが 32767 バイトより大きい場合、生成される 構造体は、以下のようになります。
DCL
/*$*$*$
SQL TYPE IS lob-type-name (length)
$*$*$*/
1 my-identifier-name,
3 my-identifier-name_LENGTH FIXED BIN(31),
3 my-identifier-name_DATA,
4 my-identifier-name_DATA1(size1) CHAR(32767),
4 my-identifier-name_DATA2 CHAR(size2);
LOB(PLI) が指定され、LOB サイズが 32767 バイト以下である場合、生成される 構造体は、以下のようになります。
DEFINE STRUCTURE
1 lob-type$$x,
2 my-identifier-name_LENGTH FIXED BIN(31),
2 my-identifier-name_DATA,
3 my-identifier-name_DATA1 CHAR(size1);
DCL my-identifier-name TYPE lob-type$$x;LOB(PLI) が指定され、LOB サイズが 32767 バイトより大きい場合、生成される 構造体は、以下のようになります。
DEFINE STRUCTURE
1 lob-type$$x,
2 my-identifier-name_LENGTH FIXED BIN(31),
2 my-identifier-name_DATA,
3 my-identifier-name_DATA1(size1) CHAR(32767),
3 my-identifier-name_DATA2 CHAR(size2),
DCL my-identifier-name TYPE lob-type$$x;これらの構造体の中で、my-identifier-name は PL/I ホスト ID の名前、lob-type$$x はプリプロセッサーが生成した名前です。size1 は、length/32767 の値を 切り捨てた整数値です。size2 は、length/32767 の剰余です。
DBCLOB データ・タイプの場合、生成される構造体は少し異なります。 2 バイト文字はそれぞれが 2 バイトなので、size1 は length/16383 の値を切り捨てた整数値であり、size2 は length/16383 の剰余です。
例えば、次のように宣言したとします。
DCL my-identifier-name SQL TYPE IS lob-type_LOCATOR;
SQL プリプロセッサーは、LOB() プリコンパイラー・オプションの設定 に応じて、この宣言を以下の構造体の 1 つに変換します。LOB(DB2) が指定されている場合、生成されるコードは次のようになります。
DCL /*$*$*$ SQL TYPE IS lob-type_LOCATOR $*$*$*/ my-identifier-name FIXED BIN(31);
LOB(PLI) が指定されている場合、SQL プリプロセッサーはこの宣言を次のコードに変換します。
DEFINE ALIAS lob-type_LOCATOR FIXED BIN(31); Dcl my-identifier-name TYPE lob-type_LOCATOR;
この例の中で、my-identifier-name は PL/I ホスト ID、lob-type_LOCATOR は LOB の タイプとストリング LOCATOR からなる、プリプロセッサーが生成した名前です。
次の例は、サンプルの PL/I 変数宣言と、LOB サポートの ための対応する変換を示しています。 これらの例はすべて、デフォルトの LOB(DB2) プリコンパイラー・オプションを指定してコンパイル されています。
DCL my_blob SQL TYPE IS BLOB(2000);
変換後:
DCL
/*$*$*$
SQL TYPE IS BLOB(2000)
$*$*$*/
1 MY_BLOB,
3 MY_BLOB_LENGTH FIXED BIN(31),
3 MY_BLOB_DATA CHAR(2000);
DCL my_dbclob SQL TYPE IS DBCLOB(4000K);
変換後:
DCL
/*$*$*$
SQL TYPE IS DBCLOB(4000K)
$*$*$*/
1 MY_DBCLOB,
3 MY_DBCLOB_LENGTH FIXED BIN(31),
3 MY_DBCLOB_DATA,
4 MY_DBCLOB_DATA1(250) GRAPHIC(16383),
4 MY_DBCLOB_DATA2 GRAPHIC(250);
DCL my_clob_locator SQL TYPE IS CLOB_LOCATOR;
変換後:
DEFINE ALIAS CLOB_LOCATOR FIXED BIN(31); DCL my_clob_locator TYPE CLOB_LOCATOR;