`

[转]讲解oracle自定义聚合函数

 
阅读更多

 应用场景:

  权限管理:同一功能对同一用户有多个不同权限设置(1-允许/0-默认/-1禁用),取组合后的权限值。

  --聚合函数就是一个对象

  create or replace type permission_sign_object as object (

  --对象变量

  permission_sign number(1),

  --对象初始化

  static function ODCIAggregateInitialize(v_self in out permission_sign_object) return number,

  --聚合函数的迭代方法

  member function ODCIAggregateIterate(self in out permission_sign_object, value in number) return number,

  --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合

  member function ODCIAggregateMerge(self in out permission_sign_object, v_next in permission_sign_object) return number,

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

       Oracle 自带的wmsys.wm_concat 函数是有长度限制的。然而需求是在不断变化,当自带的东西不能适应我们需求的时候,就需要发挥我们自己的智慧去扩展。

 

 

create or replace TYPE zh_concat_im  
AUTHID CURRENT_USER AS OBJECT
(
  CURR_STR clob,
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im) RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im,  
  P1 IN VARCHAR2) RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_concat_im,
  RETURNVALUE OUT VARCHAR2,
  FLAGS IN NUMBER)
  RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,  
  SCTX2 IN zh_concat_im) RETURN NUMBER
);
/

create or replace TYPE BODY zh_concat_im
IS
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im)
  RETURN NUMBER  
  IS
  BEGIN
  SCTX := zh_concat_im(NULL) ;
  RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im,
  P1 IN VARCHAR2)  
  RETURN NUMBER  
  IS
  BEGIN
  IF(CURR_STR IS NOT NULL) THEN  
  CURR_STR := CURR_STR || ',' || P1;
  ELSE
  CURR_STR := P1;
  END IF;
  RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_concat_im,
  RETURNVALUE OUT VARCHAR2,
  FLAGS IN NUMBER)
  RETURN NUMBER  
  IS
  BEGIN
  RETURNVALUE := CURR_STR ;
  RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,  
  SCTX2 IN zh_concat_im)  
  RETURN NUMBER  
  IS
  BEGIN
  IF(SCTX2.CURR_STR IS NOT NULL) THEN  
  SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;
  END IF;
  RETURN ODCICONST.SUCCESS;
  END;
END;
/

函数:
create or replace FUNCTION zh_concat(P1 VARCHAR2)  
RETURN VARCHAR2 AGGREGATE USING zh_concat_im ;

 

分享到:
评论

相关推荐

    oracle-database-programming.rar_oracle_oracle函数

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

    SQLServer和Oracle的常用函数

    5. **聚合函数** - 两者的`COUNT()`, `SUM()`, `AVG()`, `MIN()`, `MAX()`函数作用相同,用于对一组值进行计算。 - SQL Server独有的`GROUPING_ID()`用于确定分组级别,Oracle则使用`RANK()`, `DENSE_RANK()`, `...

    PL_SQL 教程及帮助,ORACLE常用函数

    还有聚合函数如SUM、AVG、COUNT等用于统计分析。 通过学习这些内容,你可以掌握如何利用PL_SQL进行高效的数据查询和更新,编写复杂的业务逻辑,以及如何利用Oracle的丰富函数进行数据处理。对于数据库管理员、开发...

    C#利用聚合函数SUM对销售额进行汇总

    本示例将深入讲解如何利用聚合函数SUM来汇总销售额,这是数据分析和报告生成的关键步骤。在C#中,我们通常会结合ADO.NET或者Entity Framework等ORM框架与SQL Server、MySQL、Oracle等数据库系统进行交互。 首先,让...

    Oracle系统函数大全

    8. **聚合函数** - `COUNT()`: 计算行数。 - `SUM(column)`: 求列的总和。 - `AVG(column)`: 计算列的平均值。 - `MAX(column)`, `MIN(column)`: 找到列的最大值和最小值。 9. **连接和分组函数** - `JOIN`: ...

    精通OracleSQL第2版.zip

    2. **高级查询**:深入讲解子查询、集合操作、窗口函数、分组和聚合函数等高级查询技术,以实现复杂的数据分析和报表生成。 3. **索引和优化**:讨论如何创建和管理索引,以提高查询性能。还会涵盖SQL优化器的工作...

    oracle资料大全--函数,编程大全

    从提供的文件名称来看,"oracle分析函数.doc"很可能是对Oracle分析函数的详细讲解,涵盖各种函数的用法和实例;"2.Oracle_9i10g_PLSQL编程详细(350页).pdf"可能是一部全面介绍PL/SQL编程的教程,覆盖了从基础到高级...

    Oracle中的SUM用法讲解

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的SQL功能,包括聚合函数SUM。SUM函数用于对指定列的数据进行求和,常用于统计分析。在Oracle中,SUM函数可以结合CASE WHEN语句,使得条件求和变得...

    Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目).zip

    在Oracle中,SQL不仅用于基础的CRUD(创建、读取、更新、删除)操作,还支持复杂的查询和联接,如子查询、联接查询、分组和聚合函数、窗口函数等。在提供的资料中,你可以找到SQL基本语法的学习材料和练习题,这些将...

    Oracle SQL 官方文档

    包括基本的查询构造、数据过滤、排序、分组、聚合函数以及如何处理日期和时间等。 学习这些官方文档可以帮助开发者深入理解Oracle SQL的全貌,有效编写高效的查询,设计和实施复杂的数据库解决方案。无论是初学者...

    超详细Oracle教程

    6. 分组函数:解释了SQL中的聚合函数,如COUNT、SUM、AVG、MAX、MIN等,用于对数据集进行分组和汇总。 7. 多表查询:涉及SQL中的JOIN操作,包括内连接、左连接、右连接等,用于查询多个表中的数据。 8. 子查询:...

    超详细Oracle教程.pdf

    - **聚合函数**:介绍SUM、AVG、MAX、MIN等聚合函数的使用方法。 #### 五、单行函数 - **字符串函数**:探讨如何使用TRIM、CONCAT等函数处理字符串数据。 - **数值函数**:教授使用ROUND、MOD等函数进行数值计算的...

    比较详细的oracle教程

    - **分组函数**:讲解如何使用聚合函数(如SUM、AVG、MAX、MIN、COUNT)对数据进行汇总分析,以及GROUP BY和HAVING子句的使用方法。 - **多表查询**:学习如何通过JOIN语句实现多张表之间的数据关联查询,包括内...

    ORACLE 基础训练

    同时,还会涉及子查询、连接查询、聚合函数及分组等高级用法。 存储过程是预编译的SQL语句集合,它们可以封装复杂的业务逻辑并提高执行效率。在Oracle中,你可以创建、修改和删除存储过程,通过参数传递数据,返回...

    oracle教程PPT

    还会讲解Oracle数据库的架构,如服务器进程、后台进程和数据文件等,以及如何创建和管理数据库实例。 2. **PLSQL基础.ppt** PL/SQL是Oracle特有的编程语言,用于处理SQL查询和事务。这个PPT将涵盖PL/SQL的基础...

    oracle9i中文手册

    在查询和SQL语言部分,手册会详细解析SQL的语法和使用技巧,如SELECT语句、联接操作、子查询、聚合函数以及高级查询技术。这些知识对于开发者来说至关重要,能够帮助他们快速有效地获取和处理数据。 Oracle9i支持PL...

    oracle 新手 视频

    此外,还会涉及到更高级的SQL概念,如子查询、联接(JOIN)和聚合函数(如COUNT、SUM、AVG等)。 其次,"MLDN魔乐科技JAVA培训_Oracle课堂2_SQLPlusw操作.rar"这部分内容将详细介绍Oracle提供的命令行工具SQL*Plus...

    oracle数据库课程课件

    - SQL高级特性:如JOIN操作、子查询、聚合函数、窗口函数等。 4. **表结构与数据类型** - 表的创建与修改:学习CREATE TABLE语句,理解不同数据类型,如VARCHAR2、NUMBER、DATE等。 - 约束与索引:认识NOT NULL...

Global site tag (gtag.js) - Google Analytics