`

Oracle 自定义聚合函数

 
阅读更多

创建聚合函数:

1.创建TYPE

2.创建TYPE BODY

3.定义FUNCTION

CREATE OR REPLACE TYPE T_LINK_LOB AS OBJECT
(
  V_LOB CLOB,
 
  --初始化函数
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT NOCOPY T_LINK_LOB)
    RETURN NUMBER,
  --迭代
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF  IN OUT NOCOPY T_LINK_LOB,
                                       VALUE IN VARCHAR2) RETURN NUMBER,
  
  --终止并还回值
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF        IN T_LINK_LOB,
                                         RETURNVALUE OUT NOCOPY CLOB,
                                         FLAGS       IN NUMBER)
    RETURN NUMBER,
  --合并
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT NOCOPY T_LINK_LOB,
                                     CTX2 IN T_LINK_LOB) RETURN NUMBER
);

 

CREATE OR REPLACE TYPE BODY T_LINK_LOB IS
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT NOCOPY T_LINK_LOB)
    RETURN NUMBER IS
  BEGIN
    SCTX := T_LINK_LOB(NULL);
    DBMS_LOB.CREATETEMPORARY(SCTX.V_LOB, TRUE, DBMS_LOB.SESSION);
    DBMS_LOB.OPEN(SCTX.V_LOB, DBMS_LOB.LOB_READWRITE);
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF  IN OUT NOCOPY T_LINK_LOB,
                                       VALUE IN VARCHAR2) RETURN NUMBER IS
  BEGIN
    DBMS_LOB.WRITEAPPEND(SELF.V_LOB, LENGTH(VALUE) + 1, VALUE || ',');
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF        IN T_LINK_LOB,
                                         RETURNVALUE OUT NOCOPY CLOB,
                                         FLAGS       IN NUMBER) RETURN NUMBER IS
  BEGIN
    DBMS_LOB.CREATETEMPORARY(RETURNVALUE, TRUE, DBMS_LOB.CALL);
    DBMS_LOB.COPY(RETURNVALUE,
                  SELF.V_LOB,
                  DBMS_LOB.GETLENGTH(SELF.V_LOB) - 1);
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT NOCOPY T_LINK_LOB,
                                     CTX2 IN T_LINK_LOB) RETURN NUMBER IS
  BEGIN
    NULL;
    RETURN ODCICONST.SUCCESS;
  END;
END;

 

CREATE OR REPLACE FUNCTION F_LINK_LOB(P_STR VARCHAR2) RETURN CLOB
  AGGREGATE USING T_LINK_LOB;
分享到:
评论

相关推荐

    Oracle自定义聚合函数-分析函数

    Oracle自定义聚合函数,分析函数.

    Oracle10g自定义聚合函数(字符串拼接)

    * 自定义聚合函数 wmsys.wm_concat 替换办法 * 超大字符串拼接,单个字符串4000、分隔符100,可拼出超4000的超长字符串 * 可自定义指定分隔符separator * 可自定义指定排序字段sequence,对于数字或日期类型的...

    ORACLE 乘积 聚集

    使用自定义聚集函数,实现聚集乘积: 测试select id,fun_multiply(t.value) "乘积" from (select 3 id , 4 value from dual union select 1 id , 1 value from dual union select 1 id , 0 value from dual ...

    类似于wmsys.wm_concat的自定义函数clob版

    大家用oracle数据库里面的wmsys.wm_concat函数有没有遇见过字符串缓冲区太小的情况? 针对这种情况我写了个自定义聚合函数 是clob版的。

    聚集函数(自定义分隔符拼接字符串)

    自定义聚集函数拼接字符串,根据网上常见的例子加以改进,可以自定义分隔符(利用的自定义type)。

    cpp-常用的PostGIS的一些函数使用方法以及自定义函数

    常用的PostGIS的一些函数使用方法以及自定义函数,比如:pg连接oracle、pg连接sqlserver、导出csv、导入csv、查询XX米范围内数据、模糊查询、热力图聚合、生成扇形、生成栅格、生成泰森多边形、生成蜂巢图、裁剪...

    Oracle课件.pdf

    2.3聚合函数 . 3. 创建表和约束 3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4. 数据操作语言(DML) 4.1数据插入 4.2更新数据 4.3删除数据 4.4 TRUNCATE(DDL命令) 5. 操作符 5.1算术运算 5.2关系...

    Oracle复杂视图优化案例分析

     Oracle的视图分为简单视图和复杂视图两种,简单视图是从单一的表中获取数据,其中不包含函数和数据组等,复杂视图是指在视图定义中包括了聚合函数、分析函数、用户自定义函数、多表关联、子查询等。此类视图在...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    Oracle建议我们自定义自己的角色,使我们更加灵活方便去管理用户  创建角色 SQL> create role admin;  授权给角色 SQL> grant connect,resource to admin;  撤销角色的权限 SQL> revoke connect from admin; ...

    SQL 数据分析:销售数据的小计/合计/总计以及数据透视表

    学习过 SQL 的人都知道,使用聚合函数(AVG、SUM、COUNT、MIN/MAX 等)和分组操作(GROUP BY)可以对数据进行基本的统计分析,例如统计公司员工的人数、每个部门的平均月薪等。如果想要回顾这些基础概念,可以参考这...

    关系型数据库管理系统之MySql学习总结

    文章目录数据库介绍MySql介绍添加数据导入数据查询数据内连接左外连接/右外连接子查询约束函数聚合函数分组函数数学函数字符串函数日期时间函数条件判断函数系统信息函数加密函数格式化函数自定义函数视图事务存储...

    精通SQL 结构化查询语言详解

    10.1.2 在子查询中使用聚合函数  10.2 创建和使用返回多行的子查询  10.2.1 IN子查询  10.2.2 IN子查询实现集合交和集合差运算 10.2.3 EXISTS子查询  10.2.4 EXISTS子查询实现两表交集  10.2.5 SOME/ALL...

    精通SQL--结构化查询语言详解

    10.1.2 在子查询中使用聚合函数 188 10.2 创建和使用返回多行的子查询 190 10.2.1 in子查询 190 10.2.2 in子查询实现集合交和集合差运算 191 10.2.3 exists子查询 192 10.2.4 exists子查询实现两表交集 194 ...

    C#开发经验技巧宝典

    0890 如何使用聚合函数First或Last 523 19.7 子查询与连接查询 523 0891 union与连接之间的区别 523 0892 如何应用IN查询表中的记录信息 524 0893 使用一个单行的子查询来更新列 524 0894 使用IN引入子...

    C#程序开发范例宝典(第2版).part13

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part02

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part08

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

Global site tag (gtag.js) - Google Analytics