`
godpower
  • 浏览: 21498 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

自定义合计函数

阅读更多

Example: Creating and Using a User-Defined Aggregate

<!--/TOC=h1-->

This example illustrates creating a simple user-defined aggregate function SecondMax() that returns the second-largest value in a set of numbers.

Creating SecondMax()
  1. Implement the type SecondMaxImpl to contain the ODCIAggregate routines.
    create type SecondMaxImpl as object
    (
      max NUMBER, -- highest value seen so far 
      secmax NUMBER, -- second highest value seen so far
      static function ODCIAggregateInitialize(sctx IN OUT SecondMaxImpl) 
        return number,
      member function ODCIAggregateIterate(self IN OUT SecondMaxImpl, 
        value IN number) return number,
      member function ODCIAggregateTerminate(self IN SecondMaxImpl, 
        returnValue OUT number, flags IN number) return number,
      member function ODCIAggregateMerge(self IN OUT SecondMaxImpl, 
        ctx2 IN SecondMaxImpl) return number
    );
    /
    
    
  2. Implement the type body for SecondMaxImpl.
    create or replace type body SecondMaxImpl is 
    static function ODCIAggregateInitialize(sctx IN OUT SecondMaxImpl) 
    return number is 
    begin
      sctx := SecondMaxImpl(0, 0);
      return ODCIConst.Success;
    end;
    
    member function ODCIAggregateIterate(self IN OUT SecondMaxImpl, value IN number) 
    return number is
    begin
      if value > self.max then
        self.secmax := self.max;
        self.max := value;
      elsif value > self.secmax then
        self.secmax := value;
      end if;
      return ODCIConst.Success;
    end;
    
    member function ODCIAggregateTerminate(self IN SecondMaxImpl, returnValue OUT 
    number, flags IN number) return number is
    begin
      returnValue := self.secmax;
      return ODCIConst.Success;
    end;
    
    member function ODCIAggregateMerge(self IN OUT SecondMaxImpl, ctx2 IN 
    SecondMaxImpl) return number is
    begin
      if ctx2.max > self.max then
        if ctx2.secmax > self.secmax then 
          self.secmax := ctx2.secmax;
        else
          self.secmax := self.max;
        end if;
        self.max := ctx2.max;
      elsif ctx2.max > self.secmax then
        self.secmax := ctx2.max;
      end if;
      return ODCIConst.Success;
    end;
    end;
    /
    
    
  3. Create the user-defined aggregate.
    CREATE FUNCTION SecondMax (input NUMBER) RETURN NUMBER 
    PARALLEL_ENABLE AGGREGATE USING SecondMaxImpl;
    
    

Using SecondMax()
SELECT SecondMax(salary), department_id
  FROM employees
  GROUP BY department_id
  HAVING SecondMax(salary) > 9000;
转自:http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96595/dci11agg.htm
分享到:
评论

相关推荐

    通过groovy自定义函数实现提取明细表字段至主表字段.rar

    在自定义函数中,我们可以利用Groovy的面向对象特性,定义类和方法来处理明细表和主表的数据交互。 2. **数据访问**:Groovy可以方便地与数据库进行交互,通过JDBC API或者ORM框架(如Hibernate)来查询明细表和主...

    sql自定义函数分组合并字符串列

    sql自定义函数,用于合并字符串列,可以在分组的情况下对varchar类型的字段合并

    Oracle单条SQL语句可以做什么.pdf

    本文通过几个具体的案例,探讨了如何利用单条SQL语句来实现复杂的查询逻辑,包括行列转换、处理重复值以及自定义合计函数等功能。 #### 二、行列转换 行列转换是数据库操作中常见的一种需求,通常用于将表格中的...

    如何在水晶报表中添加合计字段源程序实例,C#.net源代码编写,

    6. **自定义逻辑**: 如果需要更复杂的计算,比如根据特定条件进行分组或过滤,可以使用Crystal Reports的公式字段。在公式编辑器中编写C#表达式或函数,然后将结果添加到报表中。 7. **部署和优化**: 完成报表...

    c# datagridview 行合计

    - 在事件处理函数中,可以使用`DataGridView.FirstDisplayedCell.RowIndex`来获取当前可视区域的第一行索引,然后确保合计行的索引大于这个值。 5. **更新合计** - 如果数据源发生变化(例如,添加、删除或修改行...

    jqgrid_位于上端的合计行.

    `summaryType` 可以是内置的函数,如 "sum"(求和)、"avg"(平均值)等,也可以是自定义函数来执行更复杂的计算。 然后,使用 `gridComplete` 或 `loadComplete` 回调函数,我们可以更新合计行的数据。这些回调会...

    Excel教程 Excel常用函数使用手册 共17页.pdf

    选择单元格或区域,通过“插入”-“名称”-“定义”来创建自定义名称,比如“折扣率”,之后在公式中可以直接使用这个名字代替实际的单元格引用。 3. 数组公式的输入与查看:输入数组公式需按Ctrl + Shift + Enter...

    NC65-UAPFW使单据模板公式getcolvalue支持聚合函数.zip

    NC6X 打上补丁后,单据模板公式中数据库函数支持支持聚合函数和运算符 getcolvalue("表","max(字段)","关键字字段",值变量); getcolnmv("表","sum(字段)","关键字字段",值变量); getcolnmv("表","字段1+字段2",...

    用友NCC新增编辑公式

    例如,如果希望对单位转换后的数据进行合计,而系统自带的 `_total_` 函数只提供原始数据的合计。 - 解决这个问题可能需要修改公式处理的内部逻辑,例如通过调试`debugFormularVarDataSource`中的`getVarValue1`...

    好用的FooterDataGrid,可以轻松做合计

    开发者可以深入研究源代码,理解其工作原理,根据实际需求进行定制化开发,比如增加自定义的统计函数、调整样式、或者集成其他高级功能。这种开放源码的方式鼓励了代码复用和社区协作,有助于提升开发效率和软件质量...

    易语言超级列表框尾部添加合计

    超级列表框(Super List Box)是易语言提供的一种控件,它比普通列表框具有更丰富的功能,如支持多列显示、自定义列宽、排序等。在超级列表框中添加合计功能,主要是为了在列表的最后一行显示各项数据的总计,帮助...

    用友软件自定义编制报表公式.doc

    例如,若需要对某一列或行进行总计,可以在函数向导中选择“合计”功能,指定合计的范围和方式。 总的来说,用友软件的自定义报表公式功能为用户提供了一种灵活且强大的工具,可以处理各种复杂的财务计算和分析任务...

    datagridview添加一个合计行[实例美好实用版]

    在默认情况下,它不提供内置的合计功能,因此我们需要自定义代码来实现这一特性。 1. **创建`DataGridView`控件** 在设计阶段,将`DataGridView`控件拖放到窗体上,并设置其属性,如列宽、行高、是否可编辑等。...

    合计凭证代码和例子

    它可能涵盖了如何配置数据库连接、如何调用打印函数、如何自定义打印格式等内容。在实际应用中,阅读并理解这份说明至关重要,因为这将帮助开发者正确地集成和修改代码以适应自己的需求。 在实际编程中,合计凭证的...

    Boostrap-table求和合计.rar

    `sumFormatter` 是一个自定义函数,用于计算总计: ```javascript function sumFormatter(value, row, index) { return '$' + value.reduce(function(a, b) { return a + b; }, 0).toFixed(2); } ``` 最后,初始...

    易语言超级列表框尾部添加合计.7z

    9. **用户交互**:提供用户友好的交互方式,例如允许用户选择是否显示合计,或者自定义合计项。 以上就是易语言中如何在超级列表框尾部添加合计的基本流程和关键知识点。通过熟练掌握这些技能,可以有效地在易语言...

    FLEX的datagrid合计、平均值

    本文将深入探讨如何在Flex的Datagrid中实现数据的合计与平均值计算,帮助开发者更好地理解和应用这些功能。 首先,我们要了解Flex的Datagrid组件的基本结构。Datagrid通常与数据提供者绑定,如ArrayCollection或...

    VFP 多表头和合计

    - 自定义样式:除了基本的表头设置,还可以通过调整字体、颜色、对齐方式等来定制表头的视觉效果,使其更具可读性。 2. **合计**: - 计算方法:VFP提供了多种内置函数,如`SUM`、`COUNT`、`AVG`、`MAX`和`MIN`,...

    DataGridViewEx扩展之合计行

    * 10、增加最后一行的汇总行,支持列的聚合函数,参见http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.[removed]v=VS.100).aspx * 假设对id列显示“合计”字符,avgPrice进行平均值,total列显示...

    Android自定义控件之购物车数量加减器

    我们需要重写构造函数,并在`onDraw()`方法中绘制控件的UI。 2. **XML布局文件**: 在资源文件夹下创建一个XML布局文件,用于描述自定义控件的布局结构。可以包含两个`ImageView`(表示加号和减号)和一个`...

Global site tag (gtag.js) - Google Analytics