在oracle9中如何实现wm_concat的功能

 我来答
帐号已注销
推荐于2016-04-04 · TA获得超过315个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:248万
展开全部
方法一,使用connect by +sys_connect_by_path :
--测试数据
create table test(col varchar2(10));
insert into test values('a');
insert into test values('b');
insert into test values('c');
--SQL语句:
select ltrim(sys_connect_by_path(col, ','), ',')
from (select col, row_number() over(order by rownum) rn from test t)
where connect_by_isleaf = 1
start with rn = 1
connect by rn = prior rn + 1;
方法二,使用xmltype:
select dbms_lob.substr(rtrim(xmlagg(xmlparse(content col || ',' wellformed))
.getclobval(),
','),
4000,
1)
from test;
另外在10,11版本中也不建议使用wm_concat,这个函数属于非公开函数,在12c版本中已经失效;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
射手小小王
2015-05-29 · TA获得超过398个赞
知道小有建树答主
回答量:716
采纳率:85%
帮助的人:259万
展开全部
写个函数,在函数中结合游标就处理好了,返回给SELECT 语句就可以了

SELECT DISTINCT DEPTNO,F(DEPTNO) FROM EMP;

11G可以用LISTAGG函数

方法四:不用临时表了,用函数配合SQL查询语句一次搞定
CREATE OR REPLACE FUNCTION DEALSTRING(P_DEPTNO EMP.DEPTNO%TYPE) RETURN VARCHAR2
IS
CURSOR C1 IS SELECT ENAME FROM EMP WHERE DEPTNO=P_DEPTNO; --定义游标C1
TYPE T_TYPE IS TABLE OF EMP.ENAME%TYPE; --定义嵌套表
V_T_TYPE T_TYPE:=T_TYPE(); --初始化嵌套表
V_STRING VARCHAR2(1000); --作为范围字符串
BEGIN
NULL;
OPEN C1;
FETCH C1 BULK COLLECT INTO V_T_TYPE; --一次性把游标中的所有数据读出来存放在嵌套表V_T_TYPE中,
CLOSE C1;

FOR I IN 1..V_T_TYPE.COUNT LOOP--一次读取嵌套表V_T_TYPE中的数据,进行字符串连接,处理为A,B,C,D,的形式
V_STRING:=V_STRING||V_T_TYPE(I)||',';
END LOOP;
V_STRING:=SUBSTR(V_STRING,0,LENGTH(V_STRING)-1); --把最后的逗号去掉
RETURN V_STRING; --返回字符串
END DEALSTRING;

SELECT * FROM USER_OBJECTS S WHERE S.OBJECT_NAME=UPPER('DEALSTRING');

SELECT DISTINCT DEPTNO,DEALSTRING(DEPTNO) FROM EMP WHERE DEPTNO IS NOT NULL; --避开空的原因是我的表中有一条记录的部门号为空;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
随o天
2013-01-10 · TA获得超过3158个赞
知道大有可为答主
回答量:1740
采纳率:71%
帮助的人:2012万
展开全部
Oracle9i没有wm_concat函数,可以自己创建。创建方法参考下面地址内容:
http://www.myexception.cn/database/623259.html
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式