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