A sintaxe básica de LISTAGG é:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
No seu caso, como você tem uma subconsulta como resultado definido como
WM_CONCAT
, você pode colocar a mesma subconsulta no lugar de col_name_to_be_aggregated
em LISTAGG . Acho que você também pode se livrar de todos os REPLACE funções, pois LISTAGG pode aceitar o delimitador da sua escolha.
Tentar,
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)
Além disso, gostaria de explicar por que você precisa mudar para LISTAGG em 12c. Desde que t foi removido da versão 12c mais recente. Portanto, qualquer aplicativo que dependia da função WM_CONCAT não funcionará uma vez atualizado para 12c. Leia Por que não usar WM_CONCAT função no Oracle?
Para a versão 2 pré-11g, você não pode usar LISTAGG. Existem muitas técnicas de agregação de strings, dê uma olhada na minha resposta aqui .
Mais detalhes sobre as Técnicas de agregação de strings do Oracle