Oracle nie ma funkcji takiej jak GROUP_CONCAT w MySQL, która jest dokładnie taką funkcjonalnością, o jaką prosisz. Różne opcje takiej agregacji ciągów są dostępne na tej stronie - jednym jest użycie funkcji niestandardowej:
CREATE OR REPLACE FUNCTION get_subjectkey (IN_PK IN MYTABLE.PRIMARY_KEY%TYPE)
RETURN VARCHAR2
IS
l_text VARCHAR2(32767) := NULL;
BEGIN
FOR cur_rec IN (SELECT subject_key
FROM MYTABLE
WHERE primary_key = IN_PK) LOOP
l_text := l_text || ',' || cur_rec.ename;
END LOOP;
RETURN LTRIM(l_text, ',');
END;
Wtedy użyjesz go tak:
SELECT get_subjectkey(?) AS subject_key
FROM DUAL
...zastępując „?” z wartością klucza podstawowego.
Wcześniej
Zakładając, że chcesz tylko dodać przecinek na końcu wartości kolumny, użyj:
SELECT DISTINCT TO_CHAR(subject_key) || ','
FROM MYTABLE
Podwójna rurka -- "||" -- jest sposobem Oracle [,PostgreSQL, a teraz ANSI] do łączenia łańcuchów w SQL. Użyłem TO_CHAR do jawnej konwersji typu danych, ale możesz użyć:
SELECT DISTINCT subject_key || ','
FROM MYTABLE
...jeśli to nie jest konieczne.