oracle如何对字符串sum,对字符串的“sum”——在Oracle中自定义聚集函数的例子

Oracle的定制功能十分强大。前几天在碰到一个问题的时候,查询文档发现,oracle不但允许用户定制自己的函数,还可以定制自己的聚集函数和分析函数。

下面是我使用自定义聚集函数建立一个字符串“sum”的小例子。

SQL> CREATE OR REPLACE TYPE T_LINK AS OBJECT (

2  STR VARCHAR2(30000),

3  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER,

4  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER,

5  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBE

R) RETURN NUMBER,

6  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER

7  )

8  /

类型已创建。

SQL> CREATE OR REPLACE TYPE BODY T_LINK IS

2  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER IS

3  BEGIN

4  SCTX := T_LINK(NULL);

5  RETURN ODCICONST.SUCCESS;

6  END;

7

8  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER IS

9  BEGIN

10  SELF.STR := SELF.STR || VALUE;

11  RETURN ODCICONST.SUCCESS;

12  END;

13

14  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBE

R) RETURN NUMBER IS

15  BEGIN

16  RETURNVALUE := SELF.STR;

17  RETURN ODCICONST.SUCCESS;

18  END;

19

20  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER IS

21  BEGIN

22  NULL;

23  RETURN ODCICONST.SUCCESS;

24  END;

25  END;

26  /

类型主体已创建。

SQL> CREATE OR REPLACE FUNCTION F_LINK(P_STR VARCHAR2) RETURN VARCHAR2

2  AGGREGATE USING T_LINK;

3  /

函数已创建。

SQL> CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(20));

表已创建。

SQL> INSERT INTO TEST VALUES (1, ‘AAA‘);

已创建1 行。

SQL> INSERT INTO TEST VALUES (2, ‘BBB‘);

已创建1 行。

SQL> INSERT INTO TEST VALUES (1, ‘ABC‘);

已创建1 行。

SQL> INSERT INTO TEST VALUES (3, ‘CCC‘);

已创建1 行。

SQL> INSERT INTO TEST VALUES (2, ‘DDD‘);

已创建1 行。

SQL> COMMIT;

提交完成。

SQL> COL NAME FORMAT A60

SQL> SELECT ID, F_LINK(NAME) NAME FROM TEST GROUP BY ID;

ID NAME

---------- ------------------------------------------------------

1 AAAABC

2 BBBDDD

3 CCC

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值