【赛迪网-it技术报道】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
闽公网安备 35060202000074号