Oracle函数:复制wm_concat
-
21-09-2019 - |
题
我目前工作的Crystal Reports中的一个项目,拒绝使用无证功能WM_CONCAT,这是Oracle 10g的范围内是允许的。 下面是WM_CONCAT标题信息
WM_CONCAT(p1 IN VARCHAR2) RETURN VARCHAR2
要使用WM_CONCAT我通过它下面的:WM_CONCAT(列1);这个功能似乎接受VARCHAR2类型的列,并返回一个逗号分隔的列值的列表。我现在有这个功能的作品(我的工作电脑上)的定制版本,但它不是最优的,缺乏可重用性。任何人都可以提供良好的,可重复使用的功能类似WM_CONCAT,我可以使用?
解决方案
你当你使用wm_concat收到一条错误消息? 不同于像TO_CHAR功能,它是由wmsys拥有的,你可能需要使用wmsys.wm_concat使用它。 (除非创建过程的必要同义词)。
现在的实际问题,
此技术被称为串聚集。
您可以在这里找到很多其他的替代品。
<强> http://www.oracle-base.com/物品/ 10G / StringAggregationTechniques.php 强> 对于其他方法,寻找 “stragg” 上 http://asktom.oracle.com 另一种有用的链接: http://www.orafaq.com/node/2290
这可能是最常用的一个。 很多球队的写自己的自定义功能,这或多或少做同样的。
CREATE OR REPLACE FUNCTION get_employees (p_deptno in emp.deptno%TYPE)
RETURN VARCHAR2
IS
l_text VARCHAR2(32767) := NULL;
BEGIN
FOR cur_rec IN (SELECT ename FROM emp WHERE deptno = p_deptno) LOOP
l_text := l_text || ',' || cur_rec.ename;
END LOOP;
RETURN LTRIM(l_text, ',');
END;
/
SHOW ERRORS
,而这种解决方案适用于VARCHAR2和数量,最好通用的解决方案,可以使用Oracle ODCIAggregate界面构建的。
HTTP://下载-west.oracle.com/docs/cd/B14117_01/appdev.101/b10800/dciaggfns.htm#sthref462
对于相同的实施是在高于第一连杆在www.oracle-base.com
其他提示
我已经解决此使用类似于最后一个预言基制品中的技术:定义自定义TABLE
类型和写一个函数来聚合该类型的值转换成一个字符串。我打电话给我的功能joinstr
,然后你可以调用它,如下所示:
SELECT joinstr(CAST(MULTISET(SELECT column1 FROM table1) AS my_string_table_type), ',')
FROM DUAL
请注意:我在9I直到最近并没有看着COLLECT尚未
。