插入至 LIST 内 如果集合为 LIST,则您可将新的元素添加在 LIST 中的特定点,或添加在 LIST 的末尾。 如同 SET 或 MULTISET 一样, 您必须首先定义集合变量, 并从数据库将集合选择至该集 合变量内。 下图展示您需要定义集合变量并从 numbers 表选择 LIST 至该集合变量内的语句。 图: 定义集合变量并选择 LIST。 DEFINE e_coll LIST(INTEGER NOT NULL);
SELECT evens INTO e_coll FROM numbers WHERE id = 99; 此时,e_coll 的值可能为 LIST {2,4,6,8,10}。由于 e_coll 保存 LIST,因此,每一元素有在 该列表中的编号的位置。 要将元素添加在 LIST 中特定的位置, 请将 AT position 子句添加 到 INSERT 语句,如下图所示。 图: 将元素添加在 LIST 中特定的点。 INSERT AT 3 INTO TABLE(e_coll) VALUES(12); 现在,e_coll 中的 LIST 有元素 {2,4,12,6,8,10},依此顺序。 您在 AT 子句中为 position 输入的值可为数值或变量,但它必须有 INTEGER 或 SMALLINT 数据类型。您不可使用字母、浮点数值、十进制值或表达式。
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 296 -
检查 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 插入在该列表的结尾。