FROM 子句可包括对迭代器函数的调用,来为查询指定来源。迭代器函数是用户定义的功能,多次返回到它的调用 SQL 语句,每次返回至少一个值。
您可使用虚拟的表接口查询迭代器 UDR 的返回结果集。使用此语法来在 FROM 子句中调用迭代器函数:
元素 |
描述 |
限制 |
语法 |
column |
在此为 table 中的虚拟列声明的名称
|
在 table 中的 column 名称之中必须是唯一的,且不可包括限定符。
|
标识符 |
iterator |
迭代器函数的名称 |
必须注册在该数据库中 |
标识符 |
table |
在此为持有 iterator 结果集的虚拟表声明的名称
|
不可包括限定符 |
标识符 |
在早于
GBase 8s
10.5 的版本中,要求有关键字 FUNCTION(或 PROCEDURE)。在此版本中,这些对 SQL 的 ANSI/ISO 标准的关键字扩展是可选的,且无效。下列两个指定
fibGen( ) 作为迭代器函数的查询规范,是等同的:
SELECT * FROM TABLE FUNCTION ( fibGen(10));
SELECT * FROM TABLE ( fibGen(10));
仅可在此查询的上下文之内引用 table。在 SELECT 语句终止之后,虚拟表不再存在。
列的数目必须与通过迭代器返回的值的数量相匹配。外部的函数可返回不超过一个值(但那可为集合数据类型)。SPL 例程可返回多个值。
然而,如果迭代器 table 函数的任何参数是聚集表达式,则数据库服务器发出错误 -595.
例如,要引用该 SELECT 语句的其他部分中的虚拟
table,在 WHERE 子句或 HAVING 子句中,您必须在 FROM
子句中声明它的名称和虚拟的列名称。如果您在 Projection 子句的 Select 列表中使用星号标记,则无需在 FROM 子句中声明
table 名称或
column 名称:
SELECT * FROM ...
要获取在查询中使用迭代器函数的更多信息和示例,请参阅 GBase 8s 用户定义的例程和数据类型开发者指南
。