Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$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 }

関連項目

FeedbackOpens in a new tab