Oracle高级应用之去重聚合函数
2013-08-22 10:42
691 查看
开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车。我坐在后座看到前面一大妈跑步,很猥琐的对同学说:“你看前面那个肥婆跑得屁股都甩圆了!”这货沉默了一下。当我们和大妈擦身而过的时候,他喊道:“妈....”
本例实现的是连接字符串,并且去掉重复的项。
聚合函数实际上就是一个对象:
[sql]
view plaincopy
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
)
接着实现对象主体:
[sql]
view plaincopy
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;
最后定义函数,使用的是上面定义的对象:
[sql]
view plaincopy
create or replace function distinct_concat(input varchar2) return varchar2
parallel_enable
aggregate using distinct_concat_type;
本例实现的是连接字符串,并且去掉重复的项。
聚合函数实际上就是一个对象:
[sql]
view plaincopy
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
)
接着实现对象主体:
[sql]
view plaincopy
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;
最后定义函数,使用的是上面定义的对象:
[sql]
view plaincopy
create or replace function distinct_concat(input varchar2) return varchar2
parallel_enable
aggregate using distinct_concat_type;
相关文章推荐
- 傅老师课堂:Oracle高级应用之去重聚合函数
- 傅老师课堂:Oracle高级应用之去重聚合函数
- ORACLE 高级函数应用
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle 笔记(八)、PL/SQL 高级应用(游标、存储过程、函数、程序包)
- Oracle应用专题之:分析函数3(Top/Bottom N、First/Last、NTile)
- EXCEL公式及函数的高级应用(2)
- Oracle基本语法&&函数&&子查询&&分页查询&&排序&&集合操作&&高级分组函数
- Oracle 中 table 函数的应用浅析
- Oracle层次查询和分析函数在号段选取中的应用
- oracle高级函数-分析函数
- JavaScript高级应用——类与函数篇
- oracle分析函数应用
- 傅老师课堂:Oracle高级应用之物化视图(materialized view)
- Oracle高级函数使用的浅显介绍