示例: 返回文档标识的表函数
假设您编写一个表函数,该表函数返回一行,由与给定主题区域 (第一个参数) 匹配且包含给定字符串 (第二个参数) 的每个已知文档的单个文档标识列组成。
此用户定义的函数 (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 值将连接到主文档表,从而检索作者的名称和文档文本。