oracle聚集函数的位置,Oracle自定义聚集函数

CREATE OR REPLACE TYPE

typ_concatenate_impl AS OBJECT

(

retstr VARCHAR2(30000),--拼凑使用的中间字符串

SEPARATORFLAGVARCHAR2(64), --分隔符,默认用自由定义|,可以修改此处

STATIC FUNCTION ODCIAGGREGATEINITIALIZE(sctx IN OUT

typ_concatenate_impl) RETURN NUMBER,

MEMBER FUNCTION ODCIAGGREGATEITERATE(self IN OUT typ_concatenate_impl,

value IN VARCHAR2) RETURN NUMBER,

MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_concatenate_impl,

returnvalue OUT VARCHAR2, flags IN NUMBER) RETURN NUMBER,

MEMBER FUNCTION ODCIAGGREGATEMERGE(self IN OUT typ_concatenate_impl,

ctx2 IN typ_concatenate_impl) RETURN NUMBER

)

/

CREATE OR REPLACE TYPE BODY

typ_concatenate_impl IS

--自定义聚集函数初始化操作

STATIC FUNCTION ODCIAGGREGATEINITIALIZE(sctx IN OUT

typ_concatenate_impl) RETURN NUMBER IS

BEGIN

sctx := typ_concatenate_impl('',',');

RETURN ODCICONST.SUCCESS;

END;

--定义函数的功能,实现字符串拼接

MEMBER FUNCTION ODCIAGGREGATEITERATE(self IN OUT typ_concatenate_impl,

value IN VARCHAR2) RETURN NUMBER IS

BEGIN

self.retstr := self.retstr || value||self.SEPARATORFLAG;

RETURN ODCICONST.SUCCESS;

END;

--定义终止聚集函数的处理,返回聚集函数处理的结果

MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_concatenate_impl,

returnvalue OUT VARCHAR2, FLAGS IN NUMBER)

RETURN NUMBER IS

BEGIN

IF returnvalue IS NOT NULL THEN

returnvalue :=

SUBSTR(self.retstr,1,LENGTH(self.retstr)-1);

ELSE

returnvalue := self.retstr;

END IF;

RETURN ODCICONST.SUCCESS;

END;

--用来合并两个聚集函数的两个不同的指针对应的结果,此处默认即可

MEMBER FUNCTION ODCIAGGREGATEMERGE(self IN OUT typ_concatenate_impl,

ctx2 IN typ_concatenate_impl) RETURN NUMBER IS

BEGIN

RETURN ODCICONST.SUCCESS;

END;

END;

/

--创建自定义函数

CREATE OR REPLACE FUNCTION f_concatenate_str(i_str

VARCHAR2) RETURN VARCHAR2

AGGREGATE USING typ_concatenate_impl;

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值