现在的位置: 首页 > 综合 > 正文

Oracle学习(七)

2013年12月07日 ⁄ 综合 ⁄ 共 1669字 ⁄ 字号 评论关闭

Oracle

中自定义聚集函数




1.      


创建
Types


类型



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

create

or

replace

type
string_type
as

object

(

--
对象变量

total
varchar2
(
4000
),

 

--
对象初始化

static

function

ODCIAggregateInitialize(sctx

IN

OUT
string_type)
return

number
,

 

--
聚合函数的迭代方法

member

function

ODCIAggregateIterate(

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

function

ODCIAggregateTerminate(

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(sctx

IN

OUT
string_type)

return

number

is

begin

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

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

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

end
;

 

--
聚合函数的迭代方法

member

function

ODCIAggregateIterate(

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

function

ODCIAggregateTerminate(

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;--
引用类型

抱歉!评论已关闭.