1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
create type CumulativeProductImpl as object
(
prod NUMBER,
static function ODCIAggregateInitialize(sctx IN OUT CumulativeProductImpl)
return number,
member function ODCIAggregateIterate(self IN OUT CumulativeProductImpl,
value IN number) return number,
member function ODCIAggregateTerminate(self IN CumulativeProductImpl,
returnValue OUT number, flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT CumulativeProductImpl,
ctx2 IN CumulativeProductImpl) return number
);
/
create or replace type body CumulativeProductImpl is
static function ODCIAggregateInitialize(sctx IN OUT CumulativeProductImpl)
return number is
begin
sctx := CumulativeProductImpl(1);
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT CumulativeProductImpl, value IN number) return number is
begin
self.prod := self.prod * value;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN CumulativeProductImpl, returnValue OUT number, flags IN number) return number is
begin
returnValue := self.prod;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT CumulativeProductImpl, ctx2 IN CumulativeProductImpl) return number is
begin
self.prod := self.prod * ctx2.prod;
return ODCIConst.Success;
end;
end;
/
CREATE FUNCTION CumulativeProduct (input NUMBER) RETURN NUMBER
PARALLEL_ENABLE AGGREGATE USING CumulativeProductImpl;
/ |
Partager