您的位置:首页 > 数据库 > Oracle

oracle 自定义 group 聚合函数

2011-08-18 16:52 288 查看
create or replace type CLOB_GROUP_OBJ as object (
sum_string clob,
static function ODCIAggregateInitialize(v_self in out CLOB_GROUP_OBJ) return number,
member function ODCIAggregateIterate(self in out CLOB_GROUP_OBJ, value in varchar2) return number,
member function ODCIAggregateMerge(self in out CLOB_GROUP_OBJ, v_next in CLOB_GROUP_OBJ) return number,
member function ODCIAggregateTerminate(self in CLOB_GROUP_OBJ, return_value out clob ,v_flags in number) return number
)
/
create or replace type body CLOB_GROUP_OBJ is
static function ODCIAggregateInitialize(v_self in out CLOB_GROUP_OBJ) return number is
begin
v_self := CLOB_GROUP_OBJ(null);
return ODCICONST.Success;
end;
member function ODCIAggregateIterate(self in out CLOB_GROUP_OBJ, value in varchar2) return number is
begin
self.sum_string := self.sum_string || value||'|';
return ODCICONST.Success;
if self.sum_string<value then
self.sum_string:=value;
end if;         if self.sum_string>value then
self.sum_string:=value;
end if;

return ODCICONST.Success;
end;
member function ODCIAggregateMerge(self in out CLOB_GROUP_OBJ, v_next in CLOB_GROUP_OBJ) return number is
begin
self.sum_string := self.sum_string ||v_next.sum_string;
return ODCICONST.Success;
if self.sum_string<v_next.sum_string then
self.sum_string:=v_next.sum_string;
end if;
if self.sum_string>v_next.sum_string then
self.sum_string:=v_next.sum_string;
end if;

return ODCICONST.Success;
end;
member function ODCIAggregateTerminate(self in CLOB_GROUP_OBJ, return_value out clob ,v_flags in number) return number is
begin
return_value:= self.sum_string;
return ODCICONST.Success;
end;
end;
/
create or replace function GROUPCATCLOB(value varchar2) return clob
parallel_enable aggregate using CLOB_GROUP_OBJ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: