`

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 自定义聚合函数-分析函数 Oracle 自定义聚合函数是一种强大且灵活的功能,允许用户根据自己的需求创建自定义的聚合函数。聚合函数是一种特殊的函数,它可以对一组数据进行处理和计算,并返回一个结果。 ...

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

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

    Oracle自定义聚集函数使用

    通过这种方式,我们可以看到,Oracle自定义聚集函数提供了一种强大的工具,使开发人员能够根据特定需求定制数据聚合逻辑,从而更好地满足复杂业务场景下的数据分析需求。无论是处理简单的数值统计,还是复杂的权限...

    【Oracle】LISTAGG函数的使用.pdf

    * 还有一部分分析函数不会对同一组中的数据进行处理(例如:sum()、listagg()),这种情况下,分析函数返回的数据会有重复的,distinct 处理之后的结果与对应的聚合函数返回的结果一致。 在使用 LISTAGG 函数时,...

    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 ...

    oracle sql内置函数大全

    在Oracle数据库系统中,内置函数分为多种类型,包括数值函数、字符串函数、日期时间函数、转换函数、数学函数、聚合函数等。下面将详细介绍这些函数类别及其常见用法。 1. **数值函数**: - `ABS()`:返回一个数的...

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

    Oracle提供了一些内置的聚集函数,如`LISTAGG`,但它们可能无法满足所有需求,比如在特定场景下需要自定义分隔符。此时,自定义聚集函数就显得尤为重要。本文将深入探讨如何在PL/SQL中创建自定义聚集函数,以实现...

    oracle 10G函数大全(中文)

    4. **聚合函数与分析函数**: - 分组函数如COUNT、SUM、AVG、MAX、MIN在GROUP BY子句中使用,对分组数据进行计算。 - 分析函数如ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD等,用于窗口查询,提供行间计算功能。 5...

    oracle 创建wm_concat函数

    #### 知识点一:Oracle 10G及以下版本的wm_concat函数自定义实现 在Oracle 10G及更早版本中,并没有内置的`wm_concat`函数,该函数主要用于对一组字符串进行连接操作。为了在这些版本中实现类似的功能,需要自行...

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

    创建自定义聚合函数的步骤大致如下: 1. **创建类型**:首先,你需要创建一个PL/SQL记录类型,该类型可以存储你要聚合的列的数据。 2. **创建聚合状态类型**:这是一个PL/SQL类型的变量,用于在聚合过程中存储中间...

    Oracle10G函数大全(chm格式的,比较全面)

    4. **聚合函数**: - `COUNT()`: 计算一组值的数量。 - `SUM()`: 计算一组值的总和。 - `AVG()`: 计算一组值的平均值。 - `MAX()`: 找出一组值的最大值。 - `MIN()`: 找出一组值的最小值。 5. **转换函数**: ...

    oracle-database-programming.rar_oracle_oracle函数

    在Oracle数据库中,函数可以分为几大类,包括内置函数、数学函数、字符串函数、日期时间函数、转换函数、系统信息函数、聚合函数以及自定义函数等。以下将对这些函数进行详细讲解: 1. **内置函数**:这是Oracle...

    oracle sql 内置函数大全

    此外,Oracle SQL还提供了一些高级函数,如聚合函数(如`SUM`, `AVG`, `COUNT`)和窗口函数(如`LEAD`, `LAG`, `RANK`),这些函数在数据分析和报表生成中非常有用。 在实际应用中,了解并熟练使用这些内置函数可以...

    oracle函数大全(word+chm双版本)

    对于初学者来说,建议从基础函数开始学习,如数据类型转换和简单的算术运算,然后逐步进阶到更复杂的函数,如窗口函数和自定义聚合函数。同时,理解每个函数的工作原理和适用场景至关重要,这可以通过阅读文档中的...

    oracle最常用的函数或方法总结

    5. **聚合函数** - `COUNT()`:计算行数。 - `SUM()`:计算数值列的总和。 - `AVG()`:计算平均值。 - `MAX()` 和 `MIN()`:找到最大值和最小值。 6. **分组和排序函数** - `GROUP BY`:根据一个或多个列对...

    解决Oracle没有WM_CONCAT函数.zip

    2. 自定义聚合函数:如果你不能升级到11g或以上,或者需要兼容更早的版本,可以创建自己的PL/SQL聚合函数来模拟WM_CONCAT的行为。这正是压缩包中的PL/SQL源代码可能做的事情。 3. 使用XMLAGG函数:虽然不是为字符串...

    oracle·10G函数大全

    2. **GROUP BY和HAVING**:与聚合函数结合使用,GROUP BY用于分组,HAVING用于筛选分组后的结果。 六、逻辑与比较函数 1. **逻辑运算**:AND, OR, NOT用于布尔逻辑判断,NVL()和COALESCE()处理NULL值。 2. **比较...

    oracle函数课件

    这些文件可能包含了Oracle函数的基础知识,如聚合函数(如SUM, AVG, COUNT等)、数学函数(如ABS, ROUND, TRUNC等)、字符串操作函数(如SUBSTR, CONCAT, INSTR等)以及日期时间函数(如SYSDATE, ADD_MONTHS, TO_...

    SQL Server和Oracle的常用函数类型

    以上只是部分常用函数的对比,实际上,SQL Server 和 Oracle 还有许多其他函数,如日期时间函数、聚合函数、转换函数等,它们各自都有独特的特性和用法。了解这些函数有助于更有效地在两个系统中进行数据操作和查询...

Global site tag (gtag.js) - Google Analytics