Oracle高级应用之去重聚合函数
来源:互联网 发布:寻求淘宝合作伙伴 编辑:程序博客网 时间:2024/04/30 01:01
开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车。我坐在后座看到前面一大妈跑步,很猥琐的对同学说:“你看前面那个肥婆跑得屁股都甩圆了!”这货沉默了一下。当我们和大妈擦身而过的时候,他喊道:“妈....”
本例实现的是连接字符串,并且去掉重复的项。
聚合函数实际上就是一个对象:
- create or replace type distinct_concat_type as object
- (
- --对象变量
- cat_string varchar2(500),
- --对象初始化
- static function ODCIAggregateInitialize(cs_ctx In Out distinct_concat_type)
- return number,
- --聚合函数的迭代方法
- member function ODCIAggregateIterate(self In Out distinct_concat_type,
- value in varchar2) return number,
- --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合
- member function ODCIAggregateMerge(self In Out distinct_concat_type,
- ctx2 In Out distinct_concat_type)
- return number,
- --终止聚集函数的处理,返回聚集函数处理的结果
- member function ODCIAggregateTerminate(self In Out distinct_concat_type,
- returnValue Out varchar2,
- flags in number)
- return number
- )
- create or replace type body distinct_concat_type is
- --对象初始化
- static function ODCIAggregateInitialize(cs_ctx IN OUT distinct_concat_type)
- return number is
- begin
- cs_ctx := distinct_concat_type(null);
- return ODCIConst.Success;
- end;
- --聚合函数的迭代方法
- member function ODCIAggregateIterate(self IN OUT distinct_concat_type,
- value IN varchar2) return number is
- begin
- if self.cat_string is null or (instr(self.cat_string, value, 1, 1) = 0) then
- self.cat_string := self.cat_string || ',' || value;
- end if;
- return ODCIConst.Success;
- end;
- --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合
- member function ODCIAggregateMerge(self IN OUT distinct_concat_type,
- ctx2 IN Out distinct_concat_type)
- return number is
- begin
- if self.cat_string is null or
- (instr(self.cat_string, ctx2.cat_string, 1, 1) = 0) then
- self.cat_string := self.cat_string || ',' || ctx2.cat_string;
- end if;
- return ODCIConst.Success;
- end;
- --终止聚集函数的处理,返回聚集函数处理的结果
- member function ODCIAggregateTerminate(self IN Out distinct_concat_type,
- returnValue OUT varchar2,
- flags IN number) return number is
- begin
- returnValue := ltrim(rtrim(self.cat_string, ','), ',');
- return ODCIConst.Success;
- end;
- end;
最后定义函数,使用的是上面定义的对象:
- create or replace function distinct_concat(input varchar2) return varchar2
- parallel_enable
- aggregate using distinct_concat_type;
- Oracle高级应用之去重聚合函数
- 傅老师课堂:Oracle高级应用之去重聚合函数
- 傅老师课堂:Oracle高级应用之去重聚合函数
- Oracle之分析函数 去重 应用
- ORACLE 高级函数应用
- Oracle高级应用之解锁表
- Oracle高级应用之合并MERGE
- Oracle高级应用之合并MERGE
- Oracle高级应用之合并MERGE
- oracle高级用法之自定义函数
- 傅老师课堂:Oracle高级应用之合并MERGE
- 傅老师课堂:Oracle高级应用之解锁表
- Oracle高级应用之物化视图(materialized view)
- 傅老师课堂:Oracle高级应用之合并MERGE
- Oracle高级应用之物化视图(materialized view)
- sscanf函数高级应用
- Oracle 高级函数
- oracle 高级函数
- Android之Adapter用法总结(纠错)
- 模糊查询,用?传值
- Search in Rotated Sorted Array
- SQL查询行转列
- 庞果网幸运数,一解,失败的例子吧
- Oracle高级应用之去重聚合函数
- 选择排序
- 谁是下一个价值19亿美元的91无线?谁又是下一个百度?
- UVa 10304 (黑书例题,DP)
- Android 日常使用学习笔记 ——SparseArray
- OpenMP学习之--数据环境(代码示例)
- 归并排序
- 巧用rownum查询连续季度
- Uninstall Toolbar Cleaner with WindowsUninstaller.Org Removal Tips