迭代器函数

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 用户定义的例程和数据类型开发者指南

1 GBase 8s 扩展
2 请参阅 例程参数列表