直接上代码,看注释吧。
select zh_concat_str(concat_str(value, separator, orderby)) from dual;
--①创建一个对象类型,用以传递多个参数
create or replace type concat_str as object(
value varchar2(4000),/*聚合字段*/
separator varchar2(100),/*分隔符*/
orderby varchar2(100)/*排序字段*/
);
--②创建一个该对象的数组,存储传递的对象
create or replace type concat_str_array is table of concat_str;
--③创建聚合函数(类型头)
CREATE OR REPLACE TYPE concat_str_im
AUTHID CURRENT_USER AS OBJECT
(
str_array concat_str_array,
--初始化
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT concat_str_im) RETURN NUMBER,
--迭代方法
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT concat_str_im, P1 IN concat_str) RETURN NUMBER,
--返回结果
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN concat_str_im, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER,
--合并不同指针对应的结果(并行查询)
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT concat_str_im, SCTX2