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;--引用类型
- Oracle学习(七)
- oracle学习(七)--触发器
- Oracle起步学习(七)--组函数
- Oracle学习笔记(七)
- oracle学习记录之七
- Oracle学习(七):集合运算
- MyBatis学习(七)-MyBatis批量插入(Oracle数据库)
- jbpm学习笔记(七)——使用oracle数据库
- Oracle学习(七)之增加日志组
- Oracle学习笔记(七)操作表中的数据
- oracle 体系结构(七)
- Oracle(七)老师
- Oracle百问百答(七)
- Oracle-BPM(七)
- Oracle初探(七)
- Oracle-BPM(七)
- Oracle笔记(七)
- oracle学习笔记之七 数据操作
- 进程间通信的一个方法(.NET)
- 有关3d引擎优化的一些搜索整理
- 有关3d引擎优化的一些搜索整理
- Google 企业域名邮箱注册地址
- eclipse异常关闭 导致tomcat 6.0 无法重启
- Oracle学习(七)
- TreeSet的疑惑
- 枫叶草堂:原创“向股市找钱(连载1)”
- cocoa 内存管理
- spring 事务
- 超强PHP分页类
- 求斐波那契 (Fibonacci) 数列第 n 项的算法
- 偶然
- 刚发现一个linux在线文档库。很好很强大。