CREATE OR REPLACE TYPE type_1 AS OBJECT ( g_string VARCHAR2(32767),
STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_string_agg)
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg,
value IN VARCHAR2 )
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateTerminate(self IN
t_string_agg,
returnValue OUT VARCHAR2,
flags IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg,
ctx2 IN t_string_agg)
RETURN NUMBER ); /
CREATE OR REPLACE TYPE BODY t_string_agg IS STATIC FUNCTION
ODCIAggregateInitialize(sctx IN OUT t_string_agg)
RETURN NUMBER IS BEGIN
sctx := t_string_agg(NULL);
RETURN ODCIConst.Success; END;
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg,
value IN VARCHAR2 )
RETURN NUMBER IS BEGIN
SELF.g_string := self.g_string || ',' || value;
RETURN ODCIConst.Success; END;
MEMBER FUNCTION ODCIAggregateTerminate(self IN
t_string_agg,
returnValue OUT VARCHAR2,
flags IN NUMBER)
RETURN NUMBER IS BEGIN
returnValue := SUBSTR(SELF.g_string, 2);
RETURN ODCIConst.Success; END;
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg,
ctx2 IN t_string_agg)
RETURN NUMBER IS
BEGIN
SELF.g_string := SELF.g_string || ctx2.g_string;
RETURN ODCIConst.Success; END; END; /
CREATE OR REPLACE FUNCTION string_agg (p_input VARCHAR2) RETURN
VARCHAR2 AGGREGATE USING t_string_agg;
create aggregate
语法在PostgreSQL中定义自定义聚合函数。