通过虚拟表访问集合

当使用集合派生表段的集合表达式格式来访问集合元素时,可以通过虚拟表之间选择集合元素。只能在 SELECT 语句的 FROM 子句中使用这种格式。FROM 子句可在查询或子查询中。

用这种格式可以使用连接、聚集、WHERE 子句、表达式、ORDER BY 子句以及在使用集合变量格式时不可用的其它操作。这种格式减少了对多个游标和临时表的需求。

可能的集合表达式示例包括列的引用、标量子查询、点表达式、函数、运算符(通过重载)、集合子查询、文字集合、集合构造函数和强制转型函数等。

以下示例在 FROM 子句中使用 SELECT 语句,其结果集定义由第五十一到第七十限定行组成的虚拟表,并按照 employee_id 列值排序。
SELECT * FROM TABLE(MULTISET(SELECT SKIP 50 FIRST 20 * FROM employees 
        ORDER BY employee_id)) vt(x,y), tab2 WHERE tab2.id = vt.x;
以下示例使用连接查询创建不超过 20 行(从第 41 行开始)的虚拟表,并按照集合派生表的 salary 列的值排序:
SELECT emp_id, emp_name, emp_salary
        FROM  TABLE(MULTISET(SELECT SKIP 40 LIMIT 20 id, name, salary
        FROM e1, e2 
        WHERE e1.id = e2.id ORDER BY salary )) 
        AS etab(emp_id, emp_name, emp_salary);