Oracle中用户自己创建与调用聚合函数

WBOY
发布: 2016-06-07 17:05:14
原创
1094 人浏览过

在做项目的时候,遇到将多条记录合并为一条记录,然后将不同的字段合并为一个字段显示,并用逗号分开;本人使用后,解决了很多不便解

在做项目的时候,遇到将多条记录合并为一条记录,然后将不同的字段合并为一个字段显示,并用逗号分开;本人使用后,解决了很多不便解决的问题,,特整理如下,以供各位网友参考!

具体创建如下:首先打开sql_plus:

创建函数使用的强制类:

--Oracle9i聚合函数 (查询时使用)
create type CatStringImpl as object (
catstring VARCHAR2(4000), -- 返回的字符串
static function ODCIAggregateInitialize(sctx IN OUT CatStringImpl)
return number,
member function ODCIAggregateIterate(self IN OUT CatStringImpl,value IN varchar2)
return number,
member function ODCIAggregateTerminate(self IN CatStringImpl,returnValue OUT varchar2, flags IN number)
return number,
member function ODCIAggregateMerge(self IN OUT CatStringImpl,ctx2 IN CatStringImpl)
return number
);

然后创建函数方法,就是函数功能:

create or replace type body CatStringImpl as
static function ODCIAggregateInitialize(sctx IN OUT CatStringImpl) return number is
begin
sctx := CatStringImpl('');
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT CatStringImpl, value IN varchar2) return number is
begin
self.catstring := self.catstring || ',' || value;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN CatStringImpl, returnValue OUT varchar2, flags IN number) return number is
begin
returnValue := self.catstring;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT CatStringImpl , ctx2 IN CatStringImpl ) return number is
begin
self.catstring := self.catstring || ',' || ctx2.catstring;
return ODCIConst.Success;
end;
end;

最后就是建立函数:

create function catstr( input varchar2 ) return varchar2 PARALLEL_ENABLE AGGREGATE USING CatStringImpl;

这样就建立好了目标函数,在查询调用时如下:

select catstr( a) , b , c from tb group by b , c 就可以将字符串按照code组合起来.

catstr为函数名称,其中a是同个字段对应有不同的值,b,c就是同个字段并且相同的值.

有了这个方法,以后使用就方便多了!

linux

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!