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()
-
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
);
/
-
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;
/
-
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的面向对象特性,定义类和方法来处理明细表和主表的数据交互。 2. **数据访问**:Groovy可以方便地与数据库进行交互,通过JDBC API或者ORM框架(如Hibernate)来查询明细表和主...
sql自定义函数,用于合并字符串列,可以在分组的情况下对varchar类型的字段合并
本文通过几个具体的案例,探讨了如何利用单条SQL语句来实现复杂的查询逻辑,包括行列转换、处理重复值以及自定义合计函数等功能。 #### 二、行列转换 行列转换是数据库操作中常见的一种需求,通常用于将表格中的...
6. **自定义逻辑**: 如果需要更复杂的计算,比如根据特定条件进行分组或过滤,可以使用Crystal Reports的公式字段。在公式编辑器中编写C#表达式或函数,然后将结果添加到报表中。 7. **部署和优化**: 完成报表...
- 在事件处理函数中,可以使用`DataGridView.FirstDisplayedCell.RowIndex`来获取当前可视区域的第一行索引,然后确保合计行的索引大于这个值。 5. **更新合计** - 如果数据源发生变化(例如,添加、删除或修改行...
`summaryType` 可以是内置的函数,如 "sum"(求和)、"avg"(平均值)等,也可以是自定义函数来执行更复杂的计算。 然后,使用 `gridComplete` 或 `loadComplete` 回调函数,我们可以更新合计行的数据。这些回调会...
选择单元格或区域,通过“插入”-“名称”-“定义”来创建自定义名称,比如“折扣率”,之后在公式中可以直接使用这个名字代替实际的单元格引用。 3. 数组公式的输入与查看:输入数组公式需按Ctrl + Shift + Enter...
NC6X 打上补丁后,单据模板公式中数据库函数支持支持聚合函数和运算符 getcolvalue("表","max(字段)","关键字字段",值变量); getcolnmv("表","sum(字段)","关键字字段",值变量); getcolnmv("表","字段1+字段2",...
例如,如果希望对单位转换后的数据进行合计,而系统自带的 `_total_` 函数只提供原始数据的合计。 - 解决这个问题可能需要修改公式处理的内部逻辑,例如通过调试`debugFormularVarDataSource`中的`getVarValue1`...
开发者可以深入研究源代码,理解其工作原理,根据实际需求进行定制化开发,比如增加自定义的统计函数、调整样式、或者集成其他高级功能。这种开放源码的方式鼓励了代码复用和社区协作,有助于提升开发效率和软件质量...
超级列表框(Super List Box)是易语言提供的一种控件,它比普通列表框具有更丰富的功能,如支持多列显示、自定义列宽、排序等。在超级列表框中添加合计功能,主要是为了在列表的最后一行显示各项数据的总计,帮助...
例如,若需要对某一列或行进行总计,可以在函数向导中选择“合计”功能,指定合计的范围和方式。 总的来说,用友软件的自定义报表公式功能为用户提供了一种灵活且强大的工具,可以处理各种复杂的财务计算和分析任务...
在默认情况下,它不提供内置的合计功能,因此我们需要自定义代码来实现这一特性。 1. **创建`DataGridView`控件** 在设计阶段,将`DataGridView`控件拖放到窗体上,并设置其属性,如列宽、行高、是否可编辑等。...
它可能涵盖了如何配置数据库连接、如何调用打印函数、如何自定义打印格式等内容。在实际应用中,阅读并理解这份说明至关重要,因为这将帮助开发者正确地集成和修改代码以适应自己的需求。 在实际编程中,合计凭证的...
`sumFormatter` 是一个自定义函数,用于计算总计: ```javascript function sumFormatter(value, row, index) { return '$' + value.reduce(function(a, b) { return a + b; }, 0).toFixed(2); } ``` 最后,初始...
9. **用户交互**:提供用户友好的交互方式,例如允许用户选择是否显示合计,或者自定义合计项。 以上就是易语言中如何在超级列表框尾部添加合计的基本流程和关键知识点。通过熟练掌握这些技能,可以有效地在易语言...
本文将深入探讨如何在Flex的Datagrid中实现数据的合计与平均值计算,帮助开发者更好地理解和应用这些功能。 首先,我们要了解Flex的Datagrid组件的基本结构。Datagrid通常与数据提供者绑定,如ArrayCollection或...
- 自定义样式:除了基本的表头设置,还可以通过调整字体、颜色、对齐方式等来定制表头的视觉效果,使其更具可读性。 2. **合计**: - 计算方法:VFP提供了多种内置函数,如`SUM`、`COUNT`、`AVG`、`MAX`和`MIN`,...
* 10、增加最后一行的汇总行,支持列的聚合函数,参见http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.[removed]v=VS.100).aspx * 假设对id列显示“合计”字符,avgPrice进行平均值,total列显示...
我们需要重写构造函数,并在`onDraw()`方法中绘制控件的UI。 2. **XML布局文件**: 在资源文件夹下创建一个XML布局文件,用于描述自定义控件的布局结构。可以包含两个`ImageView`(表示加号和减号)和一个`...