La sintaxis básica de LISTAGG es:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
En su caso, dado que tiene una subconsulta como resultado establecido en WM_CONCAT
, podría colocar la misma subconsulta en lugar de col_name_to_be_aggregated
en LISTAGG .
Creo que también puedes deshacerte de todos los REPLACE funciones, ya que LISTAGG puede aceptar el delimitador de tu preferencia.
Prueba,
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)
Además, me gustaría explicar por qué necesita mudarse a LISTAGG en 12c. Dado que t se eliminó de la última versión 12c. Por lo tanto, cualquier aplicación que dependa de la función WM_CONCAT no funcionará una vez que se actualice a 12c. Lea ¿Por qué no usar WM_CONCAT? función en Oracle?
Para la versión 2 anterior a 11g, no puede usar LISTAGG. Hay muchas técnicas de agregación de cadenas, echa un vistazo a mi respuesta aquí .
Más detalles sobre técnicas de agregación de cadenas de Oracle