SELECT FIRST f[[2]] FROM ( SELECT ARRAY( ID,Quantity ) FROM GROUPO.Products )
AS dt( f ) ORDER BY f[[1]] ASC;
在本例中,ARRAY 构造函数为 Products 表的每一行构建一个含有以下两个元素的 ARRAY 类型:列 ID 和 Quantity 列的值,二者均为整数。结果将按数组中每行的第一个元素进行排序,所返回的结果是数组中第一个最小的元素(产品
ID 为 300)对应的第二个元素。也可以直接从单列查询表达式构造数组。
以下示例介绍了另一种构造数组的方法:
SELECT * FROM GROUPO.SalesOrders S WHERE ARRAY( SELECT P.ID FROM
GROUPO.Products P JOIN GROUPO.SalesOrderItems SI ON( P.ID = SI.ProductID )AND SI.ID = S.ID
ORDER BY P.ID )< ARRAY ( SELECT ID FROM GROUPO.Products ORDER BY ID );
在以下示例中,查询的 SELECT 列表使用三个数组:一个数组生成 GROUP BY 表达式,其它数组供 MAX 函数使用。在结果返回到客户端之前,特定元素的各个 ARRAY 类型都将被取消引用:
SELECT FIRST ARRAY( Quantity )[[1]], MAX( ARRAY( ID,Quantity ) )[[1]],
MAX( ARRAY( name,name ))[[2]] FROM Products GROUP BY ARRAY( Quantity )
ORDER BY 1;
以下示例说明如何使用 FETCH 语句将值传输到数组中:
BEGIN
DECLARE product_orders ARRAY(10) OF ARRAY OF INTEGER;
DECLARE products ARRAY(10) OF INTEGER;
DECLARE greatest_orders INTEGER = 0;
DECLARE i INTEGER = 1;
DECLARE curs CURSOR FOR
SELECT ProductID,
ARRAY_AGG( Quantity ) AS Quantities
FROM GROUPO.SalesOrderItems
GROUP BY ProductID
ORDER BY ProductID;
OPEN curs;
lp: LOOP
FETCH NEXT curs INTO products[[i]], product_orders[[i]];
IF SQLCODE <> 0 THEN LEAVE lp; END IF;
IF i = 1 THEN
SET greatest_orders = 1;
ELSE
IF CARDINALITY( product_orders[[greatest_orders]] )
< CARDINALITY( product_orders[[i]] ) THEN
SET greatest_orders = i;
END IF;
END IF;
SET i = i + 1;
END LOOP;
IF greatest_orders >= 1 THEN
SELECT * FROM GROUPO.Products WHERE ID = products[[greatest_orders]];
END IF;
END;