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