Informix 创建函数时出错:SQL 错误 (-999) 尚未实现

Informix Error Creating Function : SQL error(-999) Not implemented yet

我在函数内的以下查询中收到 SQL 错误 (-999) 尚未实现

 SELECT 
     RES.resourcename,
     RES.resourceloginid,
     RES.extension,
     ASD.eventdatetime,
     ASD.eventtype,
     RANK() OVER (PARTITION BY RES.resourcename ORDER BY RES.resourcename,ASD.eventdatetime)
FROM agentstatedetail ASD JOIN resource RES ON ASD.agentid=RES.resourceid
WHERE ASD.eventdatetime BETWEEN to_date('18/04/2015 00:00:00', 
            "%d/%m/%Y %H:%M:%S")
     AND to_date('18/04/2015 23:59:59', "%d/%m/%Y %H:%M:%S")
     AND ASD.agentid IN(2620,2622)
     AND ASD.eventtype IN(1, 7);

当我用整数替换 rank 语句时,它工作正常。此外,当我将带有排名函数的查询作为单独的查询(不在函数内部)执行时,我得到了想要的结果。知道为什么我在函数内部有这个查询时会收到这个错误吗? 非常感谢... 注意:我使用 Server Studio 作为客户端

正在转移评论以回答。

您使用的是哪个版本的 Informix?

最近在 12.10 和 11.70 的更高版本中添加了 OLAP 功能(例如 RANK)。如果您的版本低于该版本,它将无法运行,您需要升级。

如果您的版本支持它,那么您可能应该联系 IBM/Informix 技术支持以查明它是否是一个已知问题 and/or 在更新的修复包中修复。而且,如果这不是已知问题,您的报告可能会对他们有所帮助。

你也应该检查 IDS 12.10 Knowledge Center


并且 comment from Bharath 证实了 'version too old' 假设:

The Informix version was lower that 11.70 as you stated.

我正在回复以供未来访问者参考,因为之前的评论和回复中没有正确识别具体问题。

只要您的子查询在其 WHEN 子句中引用外部查询列,您就会在 Informix 中获得该特定错误代码。在此特定实例中,触发此错误的是 ASD.eventdatetime 引用。与排名无关。

根据具体情况,您可以使用 JOIN 来解决此问题。 ON 子句不显示此限制。

这并不是说一旦删除了该列引用,RANK 就不会在较旧的 Informix 版本中触发另一个不同的错误。

顺便说一句,我碰巧经常与思科通过 CUCCX 赋予我们的可怕数据库作斗争。使用 to_date 会降低性能。