聚合函数也叫分组函数,是对多行进行计算的一种函数,比如SUM、COUNT、AVG、MAX、MIN等等。
Oracle中为了增强扩展性,提供了一个自定义聚合函数的接口,ODCIAggregate(),用户可以用Oracle支持的各类编程语言(PLSQL、C、C++、JAVA等)定义一个聚合函数,并在程序中按照一样的语法进行使用。
实际应用中,使用到自定义聚合函数的场景极少,理由是:
1.PLSQL语言已经足够丰富,可以轻松实现绝大部分聚合场景;
2.自定义聚合函数的效率不见得比直接PLSQL实现更高。
比如ITPUB上有个求加权中位数的帖子,答主给出了两种方案的比较,实际上自定义聚合函数只是对PLSQL实现的一个包装,详细可以参考原文
http://www.itpub.net/forum.php?mod=viewthread&tid=1377770
那么,自定义聚合函数到底有啥用呢?个人觉得只有一个:封装的需要,有时是为了改善代码可读性,有时是基于技术细节的保密。
下面把Oracle官方文档的一个自定义聚合案例记录一下,该案例中的函数