可変長の文字形式、図形形式および UCS-2 形式

可変長文字フィールドには、宣言された最大長と、プログラムの実行時に変化する 現在の長さがあります。 この長さは、文字形式の場合は 1 バイト単位で、図形形式および UCS-2 形式の場合は 2 バイト単位で測定されます。可変長文字フィールドに割り振られる記憶域 は、そのフィールドに対して、VARYING、VARCHAR、VARGRAPH、または VARUCS2 キーワードがどのように 指定されているのかに基づいて、宣言された最大長よりも 2 バイトまたは 4 バイト長くなります。左端の 2 バイトまたは 4 バイトは符号なし整数フィールドで、文字、図形文字、または UCS-2 文字で現在の長さを表したものが組み込まれます。 実際のデータは、可変長フィールドの 3 番目または 5 番目のバイトから開始します。図 1 は可変長文字フィールドの記憶方法を 示しています。

図 1. 可変長形式の 文字フィールド
------------------------------------
   | current  | character data |
   | length   |                |
------------------------------------
     UNS(V)       CHAR(N)

 N = 宣言された最大長
 V = 長さ接頭部について指定されたバイト数

 V + N = 合計バイト数

変更の始まり符号なし整数の長さ接頭部は、2 バイトまたは 4 バイトの長さになります。 接頭部のサイズを指定するには、自由形式定義の VARCHAR、VARGRAPH、または VARUCS2 キーワード の 2 番目のパラメーターに 2 または 4 を指定するか、 固定形式仕様書の VARYING キーワードのパラメーターを 使用して VARYING(2) または VARYING(4) のように指定します。VARCHAR、VARGRAPH、 または VARUCS2 を 2 番目のパラメーターなしで指定するか、または、VARYING を パラメーターなしで指定すると、指定された長さが 1 から 65535 の範囲内の場合はサイズ 2 が 想定され、それ以外の場合はサイズ 4 が想定されます。変更の終わり

図 2 は、 可変長図形フィールドの保管方法を示しています。UCS-2 フィールドも同様に保管 されます。

図 2. 可変長形式の図形フィールド
------------------------------------
   | current  | graphic-data   |
   | length   |                |
------------------------------------
     UNS(V)       CHAR(N)

 N = 宣言された最大長 =  2 バイトの数
 V = 長さ接頭部について指定されたバイト数

 V + 2(N) = 合計バイト数
注: 現在の長さまで (現在の長さを含む) のデータのみが有効になります。

変更の始まり可変長フィールドを定義するには、 自由形式定義に VARCHAR、VARGRAPH、または VARUCS2 キーワードを指定するか、 または、固定形式定義仕様書に A (文字)、 G (グラフィック)、または C (UCS-2) と、キーワード VARYING を 指定します。 また、パラメーターが可変長フィールドである場合には、 定義仕様書の LIKE キーワードを使用して定義することもできます。変更の終わり

外部可変長フィールドを参照するには、入力仕様 または出力仕様で、*VAR データ属性を 使用します。

可変長フィールドは、デフォルトで、ゼロの現在の長さを持つように 初期化されます。

可変長フィールドのデータ部のアドレスは、%ADDR(フィールド名:*DATA) を使用して取得することができます。

可変長フィールドの定義例については、以下の項を参照してください。