Czy podczas używania wm_concat pojawia się komunikat o błędzie? W przeciwieństwie do funkcji takich jak to_char, należy do wmsys i może być konieczne użycie pliku wmsys.wm_concat. (o ile oczywiście nie stworzysz niezbędnych synonimów).
Teraz właściwe pytanie,
Ta technika nazywa się agregacją ciągów.
Możesz znaleźć tutaj wiele innych alternatyw.
http://www.oracle-base.com/articles/ 10g/StringAggregationTechniques.php W przypadku innych metod wyszukaj „stragg” na http://asktom.oracle.com Kolejny przydatny link :http://www.orafaq.com/node/2290
Jest to prawdopodobnie najczęściej używany. Wiele zespołów tworzy własne niestandardowe funkcje, które mniej więcej robią to samo.
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
podczas gdy to rozwiązanie działa dla varchar2 i number, najlepsze ogólne rozwiązanie można zbudować przy użyciu interfejsu Oracle ODCIAggregate.
http://download-west .oracle.com/docs/cd/B14117_01/appdev.101/b10800/dciaggfns.htm#sthref462
Implementacja tego samego znajduje się pod pierwszym linkiem powyżej na www.oracle-base.com