Получавате ли съобщение за грешка, когато използвате wm_concat? За разлика от функции като to_char, тя е собственост на wmsys и може да се наложи да използвате wmsys.wm_concat, за да я използвате. (освен ако не създадете необходимите синоними, разбира се).
Сега за същинския въпрос,
Тази техника се нарича агрегиране на низове.
Можете да намерите много други алтернативи тук.
http://www.oracle-base.com/articles/ 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 и number, най-доброто генерично решение може да бъде изградено с помощта на интерфейс Oracle ODCIAggregate.
http://download-west .oracle.com/docs/cd/B14117_01/appdev.101/b10800/dciaggfns.htm#sthref462
Внедряването за същото е на първата връзка по-горе на www.oracle-base.com