createorreplacetype CLOB_GROUP_OBJ asobject( sum_string clob, static function ODCIAggregateInitialize(v_self in out CLOB_GROUP_OBJ)returnnumber, memberfunction ODCIAggregateIterate(selfin out CLOB_GROUP_OBJ,valueinvarchar2)returnnumber, memberfunction ODCIAggregateMerge(selfin out CLOB_GROUP_OBJ, v_next in CLOB_GROUP_OBJ)returnnumber, memberfunction ODCIAggregateTerminate(selfin CLOB_GROUP_OBJ, return_value out clob,v_flags innumber)returnnumber ) / createorreplacetypebody CLOB_GROUP_OBJ is static function ODCIAggregateInitialize(v_self in out CLOB_GROUP_OBJ)returnnumberis begin v_self := CLOB_GROUP_OBJ(null); return ODCICONST.Success; end; memberfunction ODCIAggregateIterate(selfin out CLOB_GROUP_OBJ,valueinvarchar2)returnnumberis begin self.sum_string :=self.sum_string ||value||'|'; return ODCICONST.Success; ifself.sum_string<valuethen self.sum_string:=value; endif;ifself.sum_string>valuethen self.sum_string:=value; endif;
return ODCICONST.Success; end; memberfunction ODCIAggregateMerge(selfin out CLOB_GROUP_OBJ, v_next in CLOB_GROUP_OBJ)returnnumberis begin self.sum_string :=self.sum_string ||v_next.sum_string; return ODCICONST.Success; ifself.sum_string<v_next.sum_string then self.sum_string:=v_next.sum_string; endif; ifself.sum_string>v_next.sum_string then self.sum_string:=v_next.sum_string; endif;
return ODCICONST.Success; end; memberfunction ODCIAggregateTerminate(selfin CLOB_GROUP_OBJ, return_value out clob,v_flags innumber)returnnumberis begin return_value:=self.sum_string; return ODCICONST.Success; end; end; / createorreplacefunction GROUPCATCLOB(valuevarchar2)returnclob parallel_enable aggregate using CLOB_GROUP_OBJ;