使用带有 FIRST 选项的 SKIP 选项

如果带有 SKIP offset 选项的 Projection 子句还包括 FIRST 或 LIMIT,则结果集以其顺序位置在符合条件的行的集合中为(offset + 1)的行开始,而不是以第一行开始。在位置(offset + max)上的行是结果集中的最后一行,除非符合条件的行少于(offset + max)。下列示例从表 tab1 忽略头 50 行,但返回最多 10 行的结果集,以第 51 行开始:
SELECT SKIP 50 FIRST 10 a, b FROM tab1;

下一示例在查询中使用 SKIP 和 FIRST 来将不多于 5 行从表 tab1 插入到表 tab2 内,以第 11 行开始:

INSERT INTO tab2 SELECT SKIP 10 FIRST 5 * FROM tab1;
下列集合子查询仅返回第 11 至第 15 之间的符合条件的行作为集合派生的表,通过列 a 中的值排列这 5 行的顺序,并将此结果集存储在临时表中。
SELECT * FROM TABLE (MULTISET (SELECT SKIP 10 FIRST 5 a FROM tab3 
        ORDER BY a)) INTO TEMP; 
下列 INSERT 语句包括用其结果定义集合派生的表的集合子查询。这些行按列 a 中的值排列顺序,并被插入到表 tab1 内。
INSERT INTO tab1 (a) SELECT * FROM TABLE (MULTISET (SELECT SKIP 10 FIRST 5 a 
        FROM tab3 ORDER BY a));

以 ORDER 子句结合 FIRST 或 LIMIT 和 SKIP 选项的查询可对符合条件的行强加唯一的顺序,因此通过 max 的值增大 offset 的那些连续查询可将符合条件的行划分为max 行的不连接子集。这可支持那些需要固定的页大小的 web 应用程序,而无需游标管理。

仅当所有参与的数据库服务器都支持 SKIP 和 FIRST 选项,您才可在分布式查询中使用这些特性。