Oracle自定义聚集函数

来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:42 点击:

自定义聚集函数
自定义聚集函数接口简介
Oracle 提供了很多预定义好的聚集函数,比如Max(), Sum(), AVG() , 但是这些预定义的聚集函数基本上都是适应于标量数据(scalar data ) , 对于复杂的数据类型,比如说用户自定义的Object type, Clob 等, 是不支持的。

但是,幸运的是, 用户可以通过实现Oracle 的Extensibility Framework 中的ODCIAggregate interface 来创建自定义聚集函数,而且自定义的聚集函数跟内建的聚集函数用法上没有差别。

通过实现ODCIAggregate rountines 来创建自定义的聚集函数。可以通过定义一个对象类型(Object Type ),然后在这个类型内部实现ODCIAggregate 接口函数(routines) , 可以用任何一种Oracle 支持的语言来实现这些接口函数,比如C/C++, JAVA, PL/SQL 等。在这个Object Type 定义之后,相应的接口函数也都在该Object Type Body 内部实现之后, 就可以通过CREATE FUNCTION 语句来创建自定义的聚集函数了。

每个自定义的聚集函数需要实现4 个ODCIAggregate 接口函数, 这些函数定义了任何一个聚集函数内部需要实现的操作,这些函数分别是initialization, iteration, merging 和termination 。

 

a. static function ODCIAggregateInitialize(sctx IN OUTstring_agg_type ) return number

    自定义聚集函数初始化操作, 从这儿开始一个聚集函数。初始化的聚集环境(aggregation context) 会以对象实例(object type instance) 传回给oracle.

b. member function ODCIAggregateIterate(self IN OUT string_agg_type ,value IN varchar2) return number

    自定义聚集函数, 最主要的步骤, 这个函数定义我们的聚集函数具体做什么操作, 后面的例子, 是取最大值, 最小值, 平均值, 还是做连接操作.self 为当前聚集函数的指针, 用来与前面的计算结果进行关联

    这个函数用来遍历需要处理的数据,被oracle 重复调用。每次调用的时候,当前的aggreation context 和 新的(一组)值会作为传入参数。 这个函数会处理这些传入值,然后返回更新后的aggregation context. 这个函数对每一个NON-NULL 的值都会被执行一次。NULL 值不会被传递个聚集函数。

c. member function ODCIAggregateMerge (self IN string_agg_type,returnValue OUT  varchar2,flags IN number) return number

    用来合并两个聚集函数的两个不同的指针对应的结果, 用户合并不同结果结的数据, 特别是处理并行(parallel) 查询聚集函数的时候.

    这个函数用来把两个aggregation context 整合在一起,一般用来并行计算中(当一个函数被设置成enable parallel 处理的时候)。

d. member function OCDIAggregateTerminate(self IN string_agg_type,returnValue OUT varchar2,flags IN number)

     终止聚集函数的处理, 返回聚集函数处理的结果.

    这个函数是Oracle 调用的最后一个函数。它接收aggregation context 作为参数,返回最后的aggregate value.  

应用场景一:字符串聚集
CREATE OR REPLACE TYPE typ_concatenate_impl AS OBJECT

(

    retstr VARCHAR2(30000),      -- 拼凑使用的中间字符串

    SEPARATORFLAG  VARCHAR2(64), -- 分隔符,默认用自由定义| ,可以修改此处

    STATIC FUNCTION ODCIAGGREGATEINITIALIZE(sctx IN OUT typ_concatenate_impl) RETURN NUMBER,

    MEMBER FUNCTION ODCIAGGREGATEITERATE(self IN OUT typ_concatenate_impl, value IN VARCHAR2) RETURN NUMBER,

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Table函数使用简介
  • Oracle数据库Constraint约束的常用操作及异常处理
  • Bulk Collect性能分析(zz)
  • export/import的使用
  • OCP043第十五讲 Database Security
  • ORACLE10gr2数据导入MySQL方案
  • oracle 让sys用户可以使用isqlplus
  • 在oracle数据库下使用iSQL*Plus DBA访问数据库
  • Oracle行列转换小结
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1