示例: 返回文档标识的表函数

假设您编写一个表函数,该表函数返回一行,由与给定主题区域 (第一个参数) 匹配且包含给定字符串 (第二个参数) 的每个已知文档的单个文档标识列组成。

此用户定义的函数 (UDF) 可快速识别文档:

     CREATE FUNCTION DOCMATCH (VARCHAR(30), VARCHAR(255))
       RETURNS TABLE (DOC_ID CHAR(16))
       EXTERNAL NAME 'DOCFUNCS/UDFMATCH(udfmatch)'
       LANGUAGE C
       PARAMETER STYLE DB2SQL
       NO SQL
       DETERMINISTIC
       NO EXTERNAL ACTION
       NOT FENCED
       SCRATCHPAD
       NO FINAL CALL
       DISALLOW PARALLEL
       CARDINALITY 20;

在单个会话的上下文中,它将始终返回同一个表,因此定义为确定性。 RETURNS 子句定义 DOCMATCH 的输出,包括列名 DOC_ID。 不需要为此表函数指定 FINAL CALL。 DISALLOW PARALLEL 关键字是必需的,因为表函数不能并行运行。 虽然 DOCMATCH 的输出大小可以是一个大表,但 CARDINALITY 20 是一个代表值,用于帮助优化器制定正确的决策。

通常,此表函数用于与包含文档文本的表连接,如下所示:

     SELECT T.AUTHOR, T.DOCTEXT
       FROM DOCS AS T, TABLE(DOCMATCH('MATHEMATICS', 'ZORN''S LEMMA')) AS F
       WHERE T.DOCID = F.DOC_ID;

请注意用于在 FROM 子句中指定表函数的特殊语法 (TABLE 关键字)。 在此调用中, DOCMATCH () 表函数返回一行,其中包含引用 ZORN ' S LEMMA 的每个 MATHEMATICS 文档的单列 DOC_ID。 这些 DOC_ID 值将连接到主文档表,从而检索作者的名称和文档文本。