当前位置:我的异常网» 数据库 » Oracle9i增添 wm_concat函数(转)

Oracle9i增添 wm_concat函数(转)

www.myexceptions.net  网友分享于:2013-08-31  浏览:742次

Oracle9i添加 wm_concat函数(转)

一:

创建type头

create or replace type string_sum_obj as object (

--聚合函数的实质就是一个对象

sum_string varchar2(4000),

static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number,

--对象初始化

member function ODCIAggregateIterate(self in out string_sum_obj, value in varchar2) return number,

--聚合函数的迭代方法(这是最重要的方法)

member function ODCIAggregateMerge(self in out string_sum_obj, v_next in string_sum_obj) return number,

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

member function ODCIAggregateTerminate(self in string_sum_obj, return_value out varchar2 ,v_flags in number) return number

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

)

创建type具体

create or replace type body string_sum_obj is

static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number is

begin

v_self := string_sum_obj(null);

return ODCICONST.Success;

end;

member function ODCIAggregateIterate(self in out string_sum_obj, value in varchar2) return number is

begin

/* 连接,解决逗号分隔第一个字母是逗号的问题 */

if not self.sum_string is null then

self.sum_string := self.sum_string ||','|| value;

else

self.sum_string := self.sum_string || value;

end if;

return ODCICONST.Success;

/* 最大值 */

if self.sum_string

self.sum_string:=value;

end if;

/* 最小值 */

if self.sum_string>value then

self.sum_string:=value;

end if;

return ODCICONST.Success;

end;

member function ODCIAggregateMerge(self in out string_sum_obj, v_next in string_sum_obj) return number is

begin

/* 连接 */

self.sum_string := self.sum_string || v_next.sum_string;

return ODCICONST.Success;

/* 最大值 */

if self.sum_string

self.sum_string:=v_next.sum_string;

end if;

/* 最小值 */

if self.sum_string>v_next.sum_string then

self.sum_string:=v_next.sum_string;

end if;

return ODCICONST.Success;

end;

member function ODCIAggregateTerminate(self in string_sum_obj, return_value out varchar2 ,v_flags in number) return number is

begin

return_value:= self.sum_string;

return ODCICONST.Success;

end;

end;

创建函数

create or replace function wm_concat(value Varchar2) return Varchar2

parallel_enable aggregate using string_sum_obj;

二:

先创建这个类型

create or replace type strcat_type as object (

cat_string varchar2(4000),

static function ODCIAggregateInitialize(cs_ctx In Out strcat_type) return number,

member function ODCIAggregateIterate(self In Out strcat_type,value in varchar2) return number,

member function ODCIAggregateMerge(self In Out strcat_type,ctx2 In Out strcat_type) return number,

member function ODCIAggregateTerminate(self In Out strcat_type,returnValue Out varchar2,flags in number) return number

)

缺少类型体内容:

....

然后创建这个函数

CREATE OR REPLACE FUNCTION strcat(input varchar2 )

RETURN varchar2

PARALLEL_ENABLE AGGREGATE USING strcat_type;

几个用法:

9i: SYS_CONNECT_BY_PATH 函数

SQL> select id, replace(wmsys.wm_concat(rmak), ',', '') from test group by id;

ID REPLACE(WMSYS.WM_CONCAT(RMAK),

---------- --------------------------------------------

9 timggg

21 littlefff

23 tom

SQL> select * from idtable;

ID NAME

---------- ------------------------------

10 ab

10 bc

10 cd

20 hi

20 ij

20 mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) name from idtable

2  group by id;

ID NAME

---------- --------------------------------------------

10 ab,bc,cd

20 hi,ij,mn

SQL> select id,wmsys.wm_concat(name) over (order by id) name from idtable;

ID NAME

---------- --------------------------------------------

10 ab,bc,cd

10 ab,bc,cd

10 ab,bc,cd

20 ab,bc,cd,hi,ij,mn

20 ab,bc,cd,hi,ij,mn

20 ab,bc,cd,hi,ij,mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;

ID NAME

---------- --------------------------------------------

10 ab

10 ab,bc

10 ab,bc,cd

20 ab,bc,cd,hi

20 ab,bc,cd,hi,ij

20 ab,bc,cd,hi,ij,mn

6 rows selected

个人觉得这个用法比较有趣.

SQL> select id,wmsys.wm_concat(name) over (partition by id) name from idtable;

ID NAME

---------- --------------------------------------------

10 ab,bc,cd

10 ab,bc,cd

10 ab,bc,cd

20 hi,ij,mn

20 hi,ij,mn

20 hi,ij,mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) over (partition by id,name) name from idtable;

ID NAME

---------- --------------------------------------------

10 ab

10 bc

10 cd

20 hi

20 ij

20 mn

6 rows selected

文章评论

oracle 9i sql_id,Oracle9i增添 wm_concat函数(转)相关推荐

  1. Oracle列合并成行之wm_concat函数浅析

    文章目录 1.LOB类型 2. wm_concat()函数的使用 在工作中提取数据报表时碰到了很多只有一个字段不同,其他N个字段都相同的数据,用行来显示不免觉得太过冗余,于是搜寻网络发现Oracle有 ...

  2. oracle 9i故障恢复,Oracle9i rman备份恢复总结

    Recovery Manager(RMAN)是一种用于备份(backup).还原(restore)和恢复(recover)数据库的Oracle 工.RMAN只能用于ORACLE8或更高的版本中.它能够 ...

  3. Oracle 9i Server,oracle9i连接sql server 2008

    今天终于把ORACLE9I链接到SQL SERVER 2008了.用SQL SERVER 2008连接ORACLE9I非常简单,但是反过来,却花费了不少功夫. 慢慢来讲,作为一个笔记,方便以后查询. ...

  4. oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

  5. oracle9i 恢复数据库,oracle 9i使用闪回查询恢复数据库误删问题

    如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善.Oracle 9i中提供了一项新的技术手段--闪 ...

  6. 重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

  7. oracle9i 是否安全,指纹识别与Oracle 9i安全特性解析

    问:能否请你告诉我:"Oracle 9i的安全特性以及其在金融交易中对生物扫描技术的影响?" 当员工把手指放在指纹扫描仪上时会发生什么事情?(即:员工被授予访问权限之前指纹扫描仪和 ...

  8. Oracle中wm_concat函数报错解决方法

    Oracle中wm_concat函数报错解决方法 参考文章: (1)Oracle中wm_concat函数报错解决方法 (2)https://www.cnblogs.com/52net/archive/ ...

  9. mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wmsys.wm_concat()

    1.group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一 ...

最新文章

  1. oracle根据一张表更新另外一张表
  2. html屏幕宽度一体式下拉菜单怎么做_针对白屏埋点,我是这样做的
  3. 【小白学PyTorch】9.tensor数据结构与存储结构
  4. cookie的设置和获取
  5. mac os 切换网络优先级
  6. 删除临时表并且插入数据
  7. 【渝粤教育】国家开放大学2018年春季 0599-21T工程造价管理基础理论与相关法规 参考试题
  8. 得到本机或者网络上共享打印机的状态和打印任务
  9. 【转】用Qt生成dll类库及调用方法
  10. python怎么读中文-python读取中文txt文本的方法
  11. ubuntu 虚拟机(转)
  12. angular学习资源
  13. JavaScript制作页面跳转效果
  14. ES 索引mapping之keyword;term查询添加keyword查询;更改mapping keyword类型
  15. Mac Yapi 内网安装保姆级步骤
  16. 【SPARC】SPARC V8寄存器介绍
  17. linux samba yum,CentOS7下yum安装SAMBA全命令过程
  18. python如何将两个list合并成字典_怎么把两个列表合并成字典 论Python怎样将两个list合并为一个字典...
  19. 计算机ip地址无法修改密码,修改wifi密码网址进不去怎么办?
  20. ES dense_vector 计算余弦相似度

热门文章

  1. eBay | 实践Hadoop任务的性能翻倍之路
  2. 面试题:聊聊Unix与Java的IO模型?
  3. 【SpringMVC入门】SpringMVC环境搭建、接收参数的几种方式、视图解析器、@ResponseBody
  4. 计算机dns的工作原理,DNS的工作原理图解说明
  5. linux下面tomcat域名配置
  6. urllib.error.URLError:urlopen error unknown url type:https 解决办法
  7. Python中get()函数用法【详解】——Python系列学习笔记
  8. C语言满分代码:L1-050 倒数第N个字符串 (15分)
  9. python应用html模板,Flask框架如何使用HTML模板
  10. C/C++内存分配方式 .