$LISTLENGTH
Synopsis
$LISTLENGTH(list)
引数
list | 有効なリストとして評価される式。list は、1 つ以上の要素を含むエンコードされた文字列です。list を作成するには、SQL または ObjectScript の $LISTBUILD 関数または $LISTFROMSTRING 関数を使用します。既存のリストから list を抽出するには、SQL または ObjectScript の $LIST 関数を使用します。 |
概要
$LISTLENGTH は、list にある要素の数を返します。
この関数は、データ型 SMALLINT を返します。
例
以下の埋め込み SQL の例は、リストに 3 つの要素が存在するため、3 を返します。
SET a=$LISTBUILD("Red","Blue","Green")
&sql(SELECT $LISTLENGTH(:a) INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b }
以下の SQL の例も、リストに 3 つの要素が存在するため、3 を返します。
SELECT $LISTLENGTH($LISTBUILD('Red','Blue','Green'))
以下の埋め込み SQL の例も 3 を返します。2 つ目の要素にはデータがありませんが、リストに 3 つの要素があるためです。
SET a=$LISTBUILD("Red",,"Green")
&sql(SELECT $LISTLENGTH(:a) INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b }
以下の SQL の例では、各 $LISTLENGTH は 3 を返します。2 つ目の要素にはデータがありませんが、リストに 3 つの要素があるためです。
SELECT $LISTLENGTH($LISTBUILD('Red','','Green')),
$LISTLENGTH($LISTBUILD('Red',NULL,'Green')),
$LISTLENGTH($LISTBUILD('Red',,'Green'))
メモ
無効なリスト
list が無効なリストの場合は、SQLCODE -400 の致命的なエラーが発生します。
SET a="fred"
&sql(SELECT $LISTLENGTH(:a) INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b ; Variable not set
}
ObjectScript $LISTBUILD 関数を使用して、NULL 文字列のみが含まれるリストを作成した場合、これは 1 つの要素からなる有効な list です。
SET a=$LISTBUILD("")
&sql(SELECT $LISTLENGTH(:a) INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b }
NULL リスト
SQL の $LISTLENGTH 関数と ObjectScript の $LISTLENGTH 関数とでは、Null リスト (要素を含まないリスト) の扱い方が異なります。
以下の 3 つの埋め込み SQL の例は、$LISTLENGTH SQL 関数での NULL リストの処理結果を示します。最初の 2 つの例は、list が NULL 文字列で、NULL 文字列を返します。
SET a=""
&sql(SELECT $LISTLENGTH(:a)
INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b }
&sql(SELECT $LISTLENGTH(NULL)
INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b }
3 つ目の例は、list が値 $CHAR(0) で、これは無効なリストのため、SQLCODE -400 の致命的なエラーが発生します。
&sql(SELECT $LISTLENGTH('')
INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b }
これは ObjectScript の $LISTLENGTH 関数での Null リストの扱い方とは異なるということに注意してください。ObjectScript では、Null リスト (要素を含まないリスト) を表すために Null 文字列 ("") が使用されます。それにはリスト要素が含まれないため、以下の例で示すように、$LISTLENGTH のカウントは 0 となります。
WRITE $LISTLENGTH("")
$LISTLENGTH と入れ子のリスト
以下の埋め込み SQL の例は、$LISTLENGTH が入れ子になっているリストの個々の要素を認識しないため、3 を返します。
SET a=$LISTBUILD("Apple","Pear",$LISTBUILD("Walnut","Pecan"))
&sql(SELECT $LISTLENGTH(:a)
INTO :b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The number of elements is ",b }
関連項目
-
SQL リスト関数 : $LIST、$LISTBUILD、$LISTDATA、$LISTFIND、$LISTFROMSTRING、$LISTGET、$LISTSAME、$LISTTOSTRING
-
その他の SQL 関数 : $PIECE
-
ObjectScript リスト関数 : $LIST、$LISTBUILD、$LISTDATA、$LISTFIND、$LISTFROMSTRING、$LISTGET、$LISTLENGTH、$LISTNEXT、$LISTSAME、$LISTTOSTRING、$LISTVALID