Oracle自定义聚集函数(2)

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

    MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_concatenate_impl, returnvalue OUT VARCHAR2, flags IN NUMBER) RETURN NUMBER,

    MEMBER FUNCTION ODCIAGGREGATEMERGE(self IN OUT typ_concatenate_impl, ctx2 IN typ_concatenate_impl) RETURN NUMBER

)

/

CREATE OR REPLACE TYPE BODY typ_concatenate_impl IS

    -- 自定义聚集函数初始化操作

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

    BEGIN

        sctx := typ_concatenate_impl(,,);

        RETURN ODCICONST.SUCCESS;

    END;

    -- 定义函数的功能,实现字符串拼接

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

    BEGIN

        self.retstr := self.retstr || value||self.SEPARATORFLAG;

        RETURN ODCICONST.SUCCESS;

    END;

    -- 定义终止聚集函数的处理, 返回聚集函数处理的结果

    MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_concatenate_impl, returnvalue OUT VARCHAR2, FLAGS IN NUMBER)

    RETURN NUMBER IS

    BEGIN

        IF returnvalue IS NOT NULL THEN

            returnvalue := SUBSTR(self.retstr,1,LENGTH(self.retstr)-1);

        ELSE

             returnvalue := self.retstr;

        END IF;

        RETURN ODCICONST.SUCCESS;

    END;

    -- 用来合并两个聚集函数的两个不同的指针对应的结果,此处默认即可

    MEMBER FUNCTION ODCIAGGREGATEMERGE(self IN OUT typ_concatenate_impl, ctx2 IN typ_concatenate_impl) RETURN NUMBER IS

    BEGIN

        RETURN ODCICONST.SUCCESS;

    END;

END;

/

 

-- 创建自定义函数

CREATE OR REPLACE FUNCTION f_concatenate_str(i_str VARCHAR2) RETURN VARCHAR2

    AGGREGATE USING typ_concatenate_impl;

/
 

 

    创建测试表和数据,并进行测试

CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(20));

INSERT INTO TEST VALUES (1, AAA);

INSERT INTO TEST VALUES (2, BBB);

INSERT INTO TEST VALUES (1, ABC);

INSERT INTO TEST VALUES (3, CCC);

INSERT INTO TEST VALUES (2, DDD);

COMMIT;
 

查看执行后的结果,并与WMSYS.WM_CONCAT 函数执行效果对照。

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

推荐热点

  • 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