没有合适的资源?快使用搜索试试~ 我知道了~
使用自定义聚集函数,实现聚集乘积: 测试select id,fun_multiply(t.value) "乘积" from (select 3 id , 4 value from dual union select 1 id , 1 value from dual union select 1 id , 0 value from dual union select 2 id , 3 value from dual union select 2 id , 4 value from dual )t group by id;
资源推荐
资源详情
资源评论
/*-------------------------- 实现 乘积聚合 -------------------*/
CREATE OR REPLACE TYPE typ_multiply_impl AS OBJECT
(
retstr number, --临时变量
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(sctx IN OUT typ_multiply_impl) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(self IN OUT typ_multiply_impl, value IN number) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_multiply_impl, returnvalue OUT number, flags IN NUMBER) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(self IN OUT typ_multiply_impl, ctx2 IN typ_multiply_impl) RETURN NUMBER
)
/*-------------------------- 实现 乘积聚合 -------------------*/
CREATE OR REPLACE TYPE BODY typ_multiply_impl IS
--自定义聚集函数初始化操作
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(sctx IN OUT typ_multiply_impl) RETURN NUMBER IS
BEGIN
sctx := typ_multiply_impl(1);
RETURN ODCICONST.SUCCESS;
END;
--定义函数的功能,实现相乘
MEMBER FUNCTION ODCIAGGREGATEITERATE(self IN OUT typ_multiply_impl, value IN number) RETURN NUMBER IS
BEGIN
self.retstr:= self.retstr*value;
RETURN ODCICONST.SUCCESS;
END;
--定义终止聚集函数的处理,返回聚集函数处理的结果
MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_multiply_impl, returnvalue OUT number, FLAGS IN NUMBER)
RETURN NUMBER IS
BEGIN
CREATE OR REPLACE TYPE typ_multiply_impl AS OBJECT
(
retstr number, --临时变量
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(sctx IN OUT typ_multiply_impl) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(self IN OUT typ_multiply_impl, value IN number) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_multiply_impl, returnvalue OUT number, flags IN NUMBER) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(self IN OUT typ_multiply_impl, ctx2 IN typ_multiply_impl) RETURN NUMBER
)
/*-------------------------- 实现 乘积聚合 -------------------*/
CREATE OR REPLACE TYPE BODY typ_multiply_impl IS
--自定义聚集函数初始化操作
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(sctx IN OUT typ_multiply_impl) RETURN NUMBER IS
BEGIN
sctx := typ_multiply_impl(1);
RETURN ODCICONST.SUCCESS;
END;
--定义函数的功能,实现相乘
MEMBER FUNCTION ODCIAGGREGATEITERATE(self IN OUT typ_multiply_impl, value IN number) RETURN NUMBER IS
BEGIN
self.retstr:= self.retstr*value;
RETURN ODCICONST.SUCCESS;
END;
--定义终止聚集函数的处理,返回聚集函数处理的结果
MEMBER FUNCTION ODCIAGGREGATETERMINATE(self IN typ_multiply_impl, returnvalue OUT number, FLAGS IN NUMBER)
RETURN NUMBER IS
BEGIN
资源评论
xk1378522
- 粉丝: 3
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功