Oracle学习(七)

来源:互联网 发布:人工智能第一龙头股 编辑:程序博客网 时间:2024/05/18 02:04

Oracle中自定义聚集函数


1.       创建Types类型

--聚合函数就是一个对象

create or replace type string_type as object

(

--对象变量

total varchar2(4000),

 

--对象初始化

static functionODCIAggregateInitialize(sctx IN OUT string_type) return number,

 

--聚合函数的迭代方法

member functionODCIAggregateIterate(self IN OUT string_type,value IN varchar2) return number,

 

--当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合

member function ODCIAggregateMerge(self IN OUT string_type,ctx2 IN string_type) return number,

 

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

member functionODCIAggregateTerminate(self IN string_type,returnValue OUT varchar2,flags IN number) return number

)

 

2.       实现Type中的函数

create or replace type body string_type

is

 

--对象初始化

static function ODCIAggregateInitialize(sctxIN OUT string_type)

return number

is

begin

sctx := string_type(null);--有几个变量就有几个参数

--dbms_output.put_line('Initialize--');

return ODCIConst.Success;--执行是否成功

end;

 

--聚合函数的迭代方法

member functionODCIAggregateIterate(self IN OUT string_type,value IN varchar2 )

return number

is

begin

self.total := self.total || value;--给每行中指定列的值加上标题,并且相连。

--dbms_output.put_line('Iterate--'||self.total);

return ODCIConst.Success; --执行是否成功

end;

 

--当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合

member function ODCIAggregateMerge(self IN OUT string_type,ctx2 IN string_type)

return number

is

begin

self.total := self.total || ctx2.total;

--dbms_output.put_line('Merge--'||self.total);

return ODCIConst.Success; --执行是否成功

end;

 

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

member functionODCIAggregateTerminate(self IN string_type,returnValue OUT varchar2,flags IN number)

return number

is

begin

returnValue := self.total;--可进行结果的处理

--dbms_output.put_line('Terminate--'||returnValue);

return ODCIConst.Success; --执行是否成功

end;

 

end;

 

3.       创建函数

CREATE OR REPLACE FUNCTION strcon(input varchar2) --输入类型

RETURN varchar2 --返回类型

PARALLEL_ENABLE AGGREGATE USING ds_tm.string_type;--引用类型

原创粉丝点击