Oracl多行合并成一行.doc_第1页
Oracl多行合并成一行.doc_第2页
Oracl多行合并成一行.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-该测试脚本可以直接运行-现在想把数据库中数据按照固定字段分组相加,这里总结了三种方法。-创建测试表、添加测试数据create table test(id varchar2(10),mc varchar2(50);insert into test values(1,11111);insert into test values(1,22222);insert into test values(2,11111);insert into test values(2,22222);insert into test values(3,11111);insert into test values(3,22222);insert into test values(3,33333);commit;-方法一:set serveroutput on size 1000000declareunion_mc varchar2(200);beginfor cur_a in(select distinct id from test) loopfor cur_b in(select mc from test where id=cur_a.id) loopunion_mc:=union_mc|cur_b.mc;end loop;dbms_output.put_line(cur_a.id|chr(9)|union_mc);union_mc := ;end loop;end;/-方法二:CREATE OR REPLACE function link(v_id varchar2)return varchar2isunion_mc varchar2(200);beginfor cur in (select mc from test where id=v_id) loopunion_mc := union_mc|cur.mc;end loop;union_mc := rtrim(union_mc,1);return union_mc;end;/select id,link(id) from test group by id;-方法三:/*从Oracle9i开始,开发者可以创建用户自定义的合计函数,除了PL/SQL外,还可以使用任何Oralce所支持的语言(如C或者Java)来创建合计函数。TYPE头定义必须包含ODCIAggregateInitialize、ODCIAggregateIterate、ODCIAggregateMerge和ODCIAggregateTerminate这四个接口函数。*/*Initialize函数对数据组各个需要处理的字段各运行一次。自然的,我需要为每一个值准备一个新的清单,所以需要初始化持久变量list,这里初始化值为null。*/*Iterate函数处理返回的行,所以实际上是由它来创建返回的值的清单。先测试list是否为空,如果为空,就把list直接设置为所引入的value值;如果list变量非空,则给list添加一个逗号后再插入value值,list的最大允许字符数32767。*/*Terminate函数在数据组的每个行的感兴趣字段数据被处理后执行。在这个函数中我只需简单的返回清单变量即可。*/*Merge函数,用来返回成功标记的。*/*创建自己的合计函数扩展了Oracle统计和文本处理能力。*/create or replace type t_cat as object(union_mc VARCHAR2(200),static function ODCIAggregateInitialize(sctx IN OUT t_cat) return number,member function ODCIAggregateIterate(self IN OUT t_cat,value IN varchar2) return number,member function ODCIAggregateTerminate(self IN t_cat,returnValue OUT varchar2, flags IN number) return number,member function ODCIAggregateMerge(self IN OUT t_cat,ctx2 IN t_cat) return number);create or replace type body t_cat isstatic function ODCIAggregateInitialize(sctx IN OUT t_cat )return number isbeginsctx := t_cat();return ODCIConst.Success;end;member function ODCIAggregateIterate(self IN OUT t_cat, value IN varchar2)return number isbeginself.union_mc := self.union_mc | value;return ODCIConst.Success;end;member function ODCIAggregateTerminate(self IN t_cat, returnValue OUT varchar2, flags IN number) return number isbeginreturnValue := self.union_mc;return ODCIConst.Success;end;member function ODCIAggregateMerge(self IN OUT t_cat , ctx2 IN t_cat ) return number isbeginreturn ODCIConst.Success;end;end;/*如果你的Oracle服务器没有配置成支持并行处理的方式,可以去掉参数PARALLEL_ENABLE*/create or repl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论