con*_*att 4 oracle function oracle10g string-aggregation wm-concat
我目前正在研究Crystal Reports中的一个项目,该项目拒绝使用Oracle 10g中允许的未记录的函数WM_CONCAT.这是WM_CONCAT头信息
WM_CONCAT(p1 IN VARCHAR2) RETURN VARCHAR2
Run Code Online (Sandbox Code Playgroud)
要使用WM_CONCAT,我将它传递给它:WM_CONCAT(column1); 此函数似乎接受varchar2类型的列,并从列返回以逗号分隔的值列表.我目前有这个功能的自定义版本(在我的工作计算机上),但它不是最佳的,缺乏可重用性.任何人都可以提供一个好的,可重复使用的功能,如WM_CONCAT,我可以使用?
使用wm_concat时是否收到错误消息?与to_char之类的函数不同,它由wmsys拥有,您可能需要使用wmsys.wm_concat来使用它.(除非你创建必要的同义词当然).
现在针对实际问题,
这种技术称为字符串聚合.
你可以在这里找到很多其他选择.
http://www.oracle-base.com/articles/10g/StringAggregationTechniques.php 对于其他方法,请在 http://asktom.oracle.com上搜索"stragg" 另一个有用的链接: http://www.orafaq. COM /节点/ 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
Run Code Online (Sandbox Code Playgroud)
虽然此解决方案适用于varchar2和number,但可以使用Oracle ODCIAggregate接口构建最佳通用解决方案.
http://download-west.oracle.com/docs/cd/B14117_01/appdev.101/b10800/dciaggfns.htm#sthref462
实现相同的是在www.oracle-base.com上面的第一个链接
| 归档时间: |
|
| 查看次数: |
9767 次 |
| 最近记录: |