Основният синтаксис на LISTAGG е:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
Във вашия случай, тъй като имате подзаявка като резултат, зададена на WM_CONCAT
, можете да поставите същата подзаявка на мястото на col_name_to_be_aggregated
в LISTAGG .
Мисля, че можете също да се отървете от всички ЗАМЕНИ функции, тъй като LISTAGG може да приеме разделителя по твой избор.
Опитайте,
LISTAGG
(
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY product_id,
product_detail_set_id,
registration_id,
product_family_id,
application_id,
package_Set_id,
legal_status
order by packset_country)=1 THEN
legal_status
ELSE
NULL
END), ',') WITHIN GROUP (ORDER BY required_col)
Освен това бих искал да обясня защо трябва да преминете към LISTAGG в 12c. Тъй като t е премахнат от най-новата версия 12c. Следователно всяко приложение, което е разчитало на функцията WM_CONCAT, няма да работи, след като бъде надстроено до 12c. Прочетете Защо не използвате WM_CONCAT функция в Oracle?
За версия 2 преди 11g не можете да използвате LISTAGG. Има много техники за агрегиране на низове, вижте моя отговор тук .
Повече подробности за техники за агрегиране на низове на Oracle