1

假设我有这个功能sp_func(startdate, enddate)。要调用函数本身,我使用CALL sp_func(startdate, enddate);.

该函数将返回一个包含以下内容的表:

id   name      time
1    smith     3.2
2    neo       8.2
3    morpheus  2.4

我想要做的是平均该函数的时间。我试过了,SELECT AVG(time) FROM sp_func(startdate, enddate)但没有用。出现语法错误。我不确定它的确切语法是什么。任何帮助是极大的赞赏。

4

1 回答 1

0

魔术关键字是TABLE. 这是一个演示解决方案的脚本:

虚拟程序

CREATE PROCEDURE sp_func(begin_date DATE, end_date DATE)
    RETURNING INTEGER AS id, VARCHAR(10) AS NAME, DECIMAL(5,2) AS TIME;

    RETURN 1, "smith",     3.2 WITH RESUME;
    RETURN 2, "neo",       8.2 WITH RESUME;
    RETURN 3, "morpheus",  2.4;

END PROCEDURE;

EXECUTE PROCEDURE sp_func('2012-01-01', '2012-12-31');

输出

1   smith      3.20
2   neo        8.20
3   morpheus   2.40

主 SELECT 语句

SELECT AVG(a.TIME)
FROM TABLE(PROCEDURE sp_func('2012-01-01', '2012-12-31')) AS A(id, name, time)
;

输出

4.6

带有列名的 AS 子句是必要的,即使过程命名了它的返回值。

此语法记录在 Informix Guide to SQL: Syntax manual,在第 2 章的 SELECT 语句下,子标题是“迭代器函数 (IDS)”(11.70 的 ids-sqs_bookmap.pdf 副本中的 p2-638我有)。

于 2012-11-12T03:35:27.553 回答