Informix:如何平均存储过程的结果
Posted
技术标签:
【中文标题】Informix:如何平均存储过程的结果【英文标题】:Informix: How to average result from Stored Procedure 【发布时间】:2012-11-12 03:06:37 【问题描述】:假设我有这个函数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】:魔术关键字是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 手册中,在第 2 章的 SELECT 语句下,子标题是“迭代器函数 (IDS)”(ids-sqs_bookmap.txt 副本中的 p2-638)。我有 11.70 的 pdf)。
【讨论】:
感谢您的清理和回答。我能够运行你的虚拟函数并选择就好了。但是当我尝试使用我的 SP 时,我在 spl 例程中得到了非法的 sql 语句。顺便说一句,a.TIME TIME 不需要大写; SQL 不区分大小写。我只有一个将 TIME 识别为关键字的 SQL 格式化程序,但我没有转换为小写或混合大小写。在将用作迭代器函数的例程中,有些语句是不允许的。我认为禁止更新操作;所以可能是 DDL 语句。鉴于程序的主体,我可能很快就能猜到哪个是麻烦的陈述。 FUNCTION 与 PROCEDURE 的选择是,AFAIK,基本上无关紧要。以上是关于Informix:如何平均存储过程的结果的主要内容,如果未能解决你的问题,请参考以下文章