前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL函数 $LIST

SQL函数 $LIST

作者头像
用户7741497
发布2022-03-25 13:41:20
3730
发布2022-03-25 13:41:20
举报
文章被收录于专栏:hml_知识记录

大纲

代码语言:javascript
复制
$LIST(list[,position[,end]])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。可以使用 SQL 或 ObjectScript $LIST 函数从现有列表中提取列表。
  • position - 可选 - 指定列表中的起始位置。计算结果为整数的表达式。
  • end - 可选 - 指定列表中的结束位置。计算结果为整数的表达式。

描述

$LIST 从列表中返回元素。返回的元素取决于使用的参数。

  • $LIST(list) 将列表中的第一个元素作为文本字符串返回。
  • $LIST(list,position) 将指定位置指示的元素作为文本字符串返回。位置参数必须计算为整数。
  • $LIST(list,position,end) 返回一个“子列表”(编码的列表字符串),其中包含从指定开始位置到指定结束位置的列表元素。

此函数返回 VARCHAR 类型的数据。

参数

list

包含一个或多个元素的编码字符串。可以使用 SQL $LISTBUILD 函数或 ObjectScript $LISTBUILD 函数创建列表。可以使用 SQL $LISTFROMSTRING 函数或 ObjectScript $LISTFROMSTRING 函数将分隔字符串转换为列表。您可以使用 SQL $LIST 函数或 ObjectScript $LIST 函数从现有列表中提取列表。

position

要返回的列表元素的位置。列表元素从 1 开始计数。如果省略 position,则返回第一个元素。如果 position 的值是 0 或大于列表中的元素数, SQL 不会返回值。如果 position 的值为负一 (–1),则 $LIST 返回列表中的最后一个元素。

代码语言:javascript
复制
/// d ##class(PHA.TEST.SQLCommand).Li()
ClassMethod Li()
{
   s a = $lb("Red", "Blue", "Green")
    &sql(
        SELECT $LIST(:a,-1)
        INTO :b 
    )
    if SQLCODE '= 0 {
        w !,"Error code ",SQLCODE 
    } else {
        w !,"The last element is ",b 
    }
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).Li()
 
The last element is Green

如果指定了 end 参数,则 position 指定元素范围中的第一个元素。即使只返回一个元素(当位置和结束是相同的数字时),该元素也会作为编码列表字符串返回。因此,$LIST(x,2)(将元素作为普通字符串返回)与 $LIST(x,2,2)(将元素作为编码列表字符串返回)不同。

end

元素范围内最后一个元素的位置。必须指定位置才能指定结束。当指定 end 时,返回的值是一个编码的列表字符串。由于这种编码,此类字符串只能由其他 $LIST 函数处理。

如果 end 的值为:

  • 大于位置,则返回包含元素列表的编码字符串。
  • 等于位置,返回一个包含一个元素的编码字符串。
  • 小于位置,不返回值。
  • 大于列表中的元素个数,相当于指定列表中的最后一个元素。
  • 负一 (–1),相当于指定列表中的最后一个元素。

指定 end 时,可以指定零 (0) 的位置值。在这种情况下,0 等于 1

使用列表

一个表可以包含一个或多个列表字段。因为列表是编码字符串,所以这些字段可以定义为数据类型 %List (%Library.List) 或数据类型 VARCHAR。数据类型 %List 的字段可以标识为 CType(客户端数据类型)= 6

数据类型在插入或更新时不限制字段的允许值。因此,用户必须确保 List 字段中的所有数据值都是 List 编码字符串。如果 SQL $LIST函数遇到未编码的字符串数据值,则 SELECT 操作将失败并返回带有 %msgSQLCODE -400,如下所示:Unexpected error occurred: <LIST>%0AmBuncommitted+1^%sqlcq.USER.cls61.1.

可以通过使用主变量或通过在 SQL 中指定 $LISTBUILD 将列表提供给 SQL $LIST 函数。两者都显示在以下嵌入式 SQL 示例中:

代码语言:javascript
复制
/// d ##class(PHA.TEST.SQLCommand).Li1()
ClassMethod Li1()
{
    s mylist = $lb("Red", "Blue", "Green")
    &sql(
        SELECT $LIST(:mylist, 2), $LIST($LISTBUILD('Red', 'Blue', 'Green'), 3)
        INTO :a,:b 
    )
    if SQLCODE '= 0 {
        w !,"Error code ",SQLCODE 
    } else {
        w !,"The host varable list element is ",a,!
        w !,"The SQL $LISTBUILD list element is ",b,! 
    }
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).Li1()
 
The host varable list element is Blue
 
The SQL $LISTBUILD list element is Green

可以使用 $LIST 函数从另一个列表中提取列表:

代码语言:javascript
复制
/// d ##class(PHA.TEST.SQLCommand).Li2()
ClassMethod Li2()
{
    s a = $lb("Red", "Blue", "Green")
    &sql(
        SELECT $LIST(:a,2, 3)
        INTO :b 
    )
    if SQLCODE '= 0 {
        w !,"Error code ",SQLCODE 
    } else {
        &sql(
            SELECT $LIST(:b,1)
            INTO :c 
        )
        if SQLCODE '= 0 {
            w !,"Error code ",SQLCODE 
        } else {
            w !,"The element returned is ",c }
    }
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).Li2()
 
The element returned is Blue

在以下嵌入式 SQL 示例中,subList 不是有效的列表参数,因为它是作为普通字符串返回的单个元素,而不是编码列表字符串。只有 $LIST 的三参数形式返回编码列表字符串。在这种情况下,会生成 SQLCODE -400 致命错误:

代码语言:javascript
复制
/// d ##class(PHA.TEST.SQLCommand).Li3()
ClassMethod Li3()
{
    s a = $lb("Red","Blue","Green")
    &sql(
        SELECT $LIST(:a,2)
        INTO :sublist 
    )
    if SQLCODE '= 0 {
        w !,"Error code ",SQLCODE 
    } else {
        &sql(
            SELECT $LIST(:sublist,1)
            INTO :c 
        )
        if SQLCODE '= 0 {
            w !,"Error code ",SQLCODE 
        } else {
            w !,"The sublist is"
            ZZDUMP c   ; Variable not set 
        }
    }
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).Li3()
 
Error code -400

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大纲
  • 参数
  • 描述
  • 参数
    • list
      • position
        • end
        • 使用列表
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档