养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

Oracle中WMSYS.wm_contact的基本使用与理解

时间:2024-10-12 03:19:34

Oracle中wm_contact函数的使用简介

工具/原料

Oracle数据库

方法/步骤

1、我们嚼但匙噻首先了解下该函数,第一点那就是存在WMSYS用户(在oracle的XE版本上是不存在该用户的,10g与11爿讥旌护g的XE我都已经测试过),我们可以理解为wm_contact是属于WMSYS用户下的。而不同版本的oracle在对wm_contact的定义的类型不同(这一点表示不知道为什么这么做),如oracle的WMSYS.WM_CONCAT函数在OracleDatabase10gEnterpriseEditionRelease10.2.0.4.0-64bi版本中的结果是一个字符型的数据,而在OracleDatabase10gEnterpriseEditionRelease10.2.0.4.0-64bi版本中是一个CLOB类型。字符型还可以接受,但是这个CLOB就是我无法接受的了,因为用了CLOB,你就发现你再也不能distinct和groupby了!首先创建表:--CreatetablecreatetableTEST(IDINTEGERnotnull,VALUECHAR(100),NAMEVARCHAR2(100),PHONEVARCHAR2(100))tablespaceUSERSpctfree10initrans1maxtrans255storage(initial64Knext1Mminextents1maxextentsunlimited);--Create/Recreateprimary,uniqueandforeignkeyconstraintsaltertableTESTaddprimarykey(ID)usingindextablespaceUSERSpctfree10initrans2maxtrans255storage(initial64Knext1Mminextents1maxextentsunlimited);向表中插入几条数据,如下:insertintotest(ID,VALUE,NAME,PHONE)values(1,'1','张三','15232397122');insertintotest(ID,VALUE,NAME,PHONE)values(2,'2','李四','15232374122');insertintotest(ID,VALUE,NAME,PHONE)values(3,'3','王五','15232324122');然后我们执行:selectwmsys.wm_concat(name)namefromtest得到结果如下:

Oracle中WMSYS.wm_contact的基本使用与理解

2、可以看到name这一列被拼接在一起了;这里只是一个小例子,只是将这种方式使用出来。wm_contact这函数一般不怎么会用到,但是根据我自己的最近的理解大概这么几种情况下使用:当主表与从表为一对多的关系的时候,或者元数据中的行列转换的时候。目前我只在这两种情况下使用过,关于元数据的行列转换我不在这里说因为举一个元数据行列的例子太麻烦了,而主表从表这一个比较简单,也适合举例子,如:A表记录老师信息,B表记录学生信息,我去查看老师的信息同时想知道该老师管理那些学生,那么这个时候我们是不是就要将所有的学生的姓名转为一个数据同老师的信息放在一起。

© 一点知识