-- Simple aggregate function which concatenates its string
-- arguments into a single comma-separated string
--
-- Daylight CIS, 9/15/2005
-- Define object type and methods
create or replace type cagg_t as object (
str_agg varchar2(4000),
static function ODCIAggregateInitialize(sctx in out cagg_t)
return number,
member function ODCIAggregateIterate(self in out cagg_t,
value in varchar2) return number,
member function ODCIAggregateTerminate(self in cagg_t,
return_value out varchar2, flags in number) return number,
member function ODCIAggregateMerge(self in out cagg_t,
ctx2 in cagg_t) return number
);
/
-- Implement methods
create or replace type body cagg_t is
static function ODCIAggregateInitialize(sctx in out cagg_t)
return number is
begin
sctx := cagg_t(null);
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(
self in out cagg_t, value in varchar2)
return number is
begin
if (length(str_agg) != 0) then
str_agg := str_agg || ',' || value;
else
str_agg := value;
end if;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self in cagg_t,
return_value out varchar2, flags in number) return number is
begin
return_value := str_agg;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self in out cagg_t,
ctx2 in cagg_t) return number is
begin
str_agg := str_agg || ',' || ctx2.str_agg;
return ODCIConst.Success;
end;
end;
/
-- Define PL/SQL function which uses the new object type
create or replace function comma_concat (input varchar2) return varchar2
parallel_enable aggregate using cagg_t;
/