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

WBOY
發布: 2016-06-07 17:05:14
原創
1093 人瀏覽過

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

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

具体创建如下:首先打开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學習者快速成長!