Я знаю, что есть несколько вопросов по этому же вопросу, но я не смог найти тот, который решит мою проблему.Я также знаю об этой статье , и это именно то, что я использовал для кода ниже.У меня просто небольшая проблема ...
table_a:
a_id a_name
1 aaa
2 bbb
3 ccc
table_b:
b_id b_name
1 ddd
2 eee
3 fff
table_c
a_id b_id
1 2
1 3
2 1
3 1
3 2
3 3
У меня есть таблицы выше, и мне нужен оператор SELECT, который выполняет это:
a_name list_of_b_name
aaa eee,fff
bbb ddd
ccc ddd,eee,fff
Возможно, есть некоторые функции Oracle, которые я могу использоватьчтобы упростить процесс, как WM_CONCAT (еще не пробовал), но мне нужно использовать FUNCTION, и это моя попытка после просмотра статьи, указанной выше:
CREATE OR REPLACE
FUNCTION f_test(id IN table_c.a_id % TYPE) RETURN VARCHAR2 IS
l_text VARCHAR2(32767) := NULL;
BEGIN
FOR cur_rec IN (SELECT b_id FROM table_c WHERE a_id = id) LOOP
l_text := l_text || ',' || cur_rec.b_id;
END LOOP;
RETURN LTRIM(l_text, ',');
END;
А затем SELECT выглядит следующим образом:
SELECT a_id, f_test(a_id)
FROM table_c
GROUP BY a_id;
Как и следовало ожидать из приведенного выше кода (не то, что я хочу, это то, что я получаю):
a_id list_of_b_id
1 2,3
2 1
3 1,2,3
Я пробовал много вещей как с помощью SELECT, так иКод функции, но я не могу делать то, что мне нужно ...