文章目录
第八十六章 SQL函数 $LISTLENGTH
返回指定列表中元素数量的列表函数。
大纲
$LISTLENGTH(list)
参数
-
list
- 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。您可以使用 SQL 或 ObjectScript 的$LISTBUILD
或$LISTFROMSTRING
函数创建列表。您可以使用 SQL 或 ObjectScript$LIST
函数从现有列表中提取列表。
描述
$LISTLENGTH
返回列表中元素的数量。
此函数返回 SMALLINT
类型的数据。
示例
以下嵌入式 SQL 示例返回 3
,因为列表中有 3
个元素:
/// d ##class(PHA.TEST.SQLFunction).ListLength()
ClassMethod ListLength()
{
s a = $lb("Red", "Blue", "Green")
&sql(
SELECT $LISTLENGTH(:a) INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b
}
}
DHC-APP> d ##class(PHA.TEST.SQLFunction).ListLength()
The number of elements is 3
以下 SQL 示例也返回 3
,因为列表中有 3
个元素:
SELECT $LISTLENGTH($LISTBUILD('Red','Blue','Green'))
3
以下嵌入式 SQL 示例也返回 3
。列表中有 3
个元素,但第二个元素不包含数据:
/// d ##class(PHA.TEST.SQLFunction).ListLength1()
ClassMethod ListLength1()
{
s a = $lb("Red", , "Green")
&sql(
SELECT $LISTLENGTH(:a) INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListLength1()
The number of elements is 3
在下面的 SQL 示例中,每个 $LISTLENGTH
返回 3
,因为列表中有 3
个元素,尽管第二个元素不包含数据:
SELECT $LISTLENGTH($LISTBUILD('Red','','Green')),
$LISTLENGTH($LISTBUILD('Red',NULL,'Green')),
$LISTLENGTH($LISTBUILD('Red',,'Green'))
3 3 3
注意
无效列表
如果 list
不是有效的列表,则会生成 SQLCODE -400
致命错误:
/// d ##class(PHA.TEST.SQLFunction).ListLength2()
ClassMethod ListLength2()
{
s a = "fred"
&sql(
SELECT $LISTLENGTH(:a) INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b ; Variable not set
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListLength2()
Error code;-400
如果使用 ObjectScript $LISTBUILD
函数构建一个仅包含空字符串的列表,则这是一个有效列表,包含一个元素:
/// d ##class(PHA.TEST.SQLFunction).ListLength3()
ClassMethod ListLength3()
{
s a = $lb("")
&sql(
SELECT $LISTLENGTH(:a) INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListLength3()
The number of elements is 1
null列表
SQL $LISTLENGTH
函数和ObjectScript $LISTLENGTH
函数在处理空列表(不包含元素的列表)的方式上有所不同。
以下三个嵌入式 SQL 示例显示 $LISTLENGTH
SQL 函数如何处理空列表。在前两个示例中,list
是空字符串,并返回一个空字符串:
/// d ##class(PHA.TEST.SQLFunction).ListLength4()
ClassMethod ListLength4()
{
s a = ""
&sql(
SELECT $LISTLENGTH(:a)
INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListLength4()
The number of elements is
/// d ##class(PHA.TEST.SQLFunction).ListLength5()
ClassMethod ListLength5()
{
&sql(
SELECT $LISTLENGTH(NULL)
INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b
}
}
DHC-APP> d ##class(PHA.TEST.SQLFunction).ListLength5()
The number of elements is
在第三个例子中,list
是值 $CHAR(0)
,它是一个无效的列表;生成 SQLCODE -400
致命错误:
/// d ##class(PHA.TEST.SQLFunction).ListLength6()
ClassMethod ListLength6()
{
&sql(
SELECT $LISTLENGTH('')
INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListLength6()
Error code;-400
请注意,这与 ObjectScript $LISTLENGTH
函数处理空列表的方式不同。在 ObjectScript 中,空字符串 (""
) 用于表示空列表,即不包含任何元素的列表。因为它不包含列表元素,所以它的 $LISTLENGTH
计数为 0
,如下例所示:
DHC-APP> WRITE $LISTLENGTH("")
0
$LISTLENGTH 和嵌套列表
以下嵌入式 SQL 示例返回 3
,因为 $LISTLENGTH
无法识别嵌套列表中的各个元素:
/// d ##class(PHA.TEST.SQLFunction).ListLength7()
ClassMethod ListLength7()
{
s a = $lb("Apple", "Pear", $LISTBUILD("Walnut", "Pecan"))
&sql(
SELECT $LISTLENGTH(:a)
INTO :b
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} else {
w !,"The number of elements is ",b
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListLength7()
The number of elements is 3