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

时间:2015-05-15 06:33:47

标签: sql database informix

我在函数内的以下查询中遇到 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语句时,它可以正常工作。此外,当我使用rank函数作为单独的查询(不在函数内)执行查询时,我得到了所需的结果。知道为什么我在函数内部查询时出现此错误? 非常感谢... 注意:我使用Server Studio作为客户端

2 个答案:

答案 0 :(得分:0)

转移评论以回答。

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

最近在12.10和更高版本的11.70中添加了OLAP功能(例如RANK)。如果您的版本早于此版本,则无法使用,您需要升级。

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

您也应该检查IDS 12.10 Knowledge Center

来自commentBharath确认了'版本过旧'的假设:

  

如你所述,Informix版本低于11.70。

答案 1 :(得分:0)

我正在回应以供将来的访问者参考,因为在先前的评论和响应中未正确识别出特定问题。

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

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

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

顺便说一句,我碰巧经常与Cisco通过CUCCX授予我们的可怕数据库打交道。使用to_date会降低性能。