检查 LIST 集合的基数

有时,您可能想要将元素添加在 LIST 的末尾。在此情况下,您可使用 cardinality() 函数来找到 LIST 中的元素的编号,然后输入一个大于 cardinality() 返回的值的位置。

GBase 8s 允许您随同存储在列中的集合来使用 cardinality() 函数,但不允许随同存储在集合变量中的集合来使用。在 SPL 例程中,您可以 SELECT 语句检查列中的集合的基数,并将该值返回给变量。

假设在 numbers 表中,其 id 列为 99 的那一行的 evens 列仍然包含集合 LIST {2,4,6,8,10}。这一次,您想要将元素 12 添加在该 LIST 的末尾。您可使用 SPL 过程 end_of_list 实现,如下图所示。

图: end_of_list SPL 过程。

CREATE PROCEDURE end_of_list()
          
          DEFINE n SMALLINT;
          DEFINE list_var LIST(INTEGER NOT NULL);
          
          SELECT CARDINALITY(evens) FROM numbers INTO n
          WHERE id = 100;
          
          LET n = n + 1;
          
          SELECT evens INTO list_var FROM numbers
          WHERE id = 100;
          
          INSERT AT n INTO TABLE(list_var) VALUES(12);
          
          END PROCEDURE;

end_of_list 中,变量 n 保存 cardinality() 返回的值,即,LIST 中的项数。LET 语句使 n 递增,以便于 INSERT 语句可在 LIST 的最后的位置插入值。SELECT 语句将来自该表的一行的集合选择至集合变量 list_var 内。INSERT 语句将元素 12 插入在该列表的结尾。