我目前工作的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尚未

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top