可変長式の最大長を入手するために使用する %LEN
%LEN の 2 番目のパラメーターが *MAX である場合、この関数は、可変長式の最大文字数を戻します。 %LEN の最初のパラメーターがフィールド名であれば、この値は、フィールドの定義長と同じになります。 例えば、可変長 UCS-2 フィールドが 25C と定義されている場合、%LEN(fld:*MAX) は 25 を戻します。
図 1. *MAX を指定した %LEN の例
D char_varying s 100a varying
D ucs2_varying s 5000c varying
D graph_varying s 7000g varying(4)
D graph_fld10 s 10g
D char_fld10 s 10a
/free
// Calculate several length and size values
// - The maximum length, %LEN(*MAX), measured in characters
// - The current length, %LEN, measured in characters
// - The size, %SIZE, measured in bytes, including the
// 2- or 4-byte length prefix
// Each alphanumeric character has one byte char_varying = 'abc';
// Length is 3 max_len = %len(char_varying : *MAX);
len = %len(char_varying);
size = %size(char_varying);
// max_len = 100
// len = 3
// size = 102 (100 + 2)
// Each UCS-2 character has two bytes ucs2_varying = 'abc';
// Length is 3 max_len = %len(ucs2_varying : *MAX);
len = %len(ucs2_varying);
size = %size(ucs2_varying);
// max_len = 5000
// len = 3
// size = 10002 (5000 * 2 + 2)
// Each graphic character has two bytes.
// For field graph_varying, VARYING(4) was specified,
// so the length prefix has four bytes graph_varying = graph_fld10;
// Length is 10 max_len = %len(graph_varying : *MAX);
len = %len(graph_varying);
size = %size(graph_varying);
// max_len = 7000
// len = 10
// size = 14004 (7000 * 2 + 4)
// Calculate %LEN(*MAX) of a concatenation graph_varying = %subst(graph_fld10:1:5);
// Length is 5 max_len = %len(graph_varying + graph_fld10 : *MAX);
len = %len(graph_varying + graph_fld10);
// max_len = 7010 (7000 + 10)
// len = 15 (5 + 10)
// Calculate %LEN(*MAX) of a %TRIM expression char_fld10 = '1234';
// Trimmed length is 4 max_len = %len(%trim(char_fld10) : *MAX);
len = %len(%trim(char_fld10));
// max_len = 10 (maximum trimmed length)
// len = 4 (actual trimmed length)