Informix:如何平均存储过程的结果

时间:2012-11-12 03:06:37

标签: stored-procedures informix user-defined-functions

假设我有这个功能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),但它没有用。发生语法错误。我不确定这个的确切语法是什么。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

magic关键字是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 SQL指南:语法手册中,在第2章的SELECT语句下记录了这种语法,子标题是'迭代器函数(IDS)'(ids-sqs_bookmap副本中的p2-638)。 pdf为11.70,我有。)

相关问题