Den grundlæggende syntaks for LISTAGG er:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
I dit tilfælde, da du har en underforespørgsel som resultat sat til WM_CONCAT
, kan du sætte den samme underforespørgsel i stedet for col_name_to_be_aggregated
i LISTAGG .
Jeg tror også, du kan slippe af med alle de ERSTAT funktioner, da LISTAGG kan acceptere afgrænsningstegnet efter eget valg.
Prøv,
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)
Jeg vil også gerne forklare, hvorfor du skal flytte til LISTAGG i 12c. Da t er blevet fjernet fra den seneste 12c-version. Derfor vil enhver applikation, der har været afhængig af WM_CONCAT-funktionen, ikke fungere, når den er opgraderet til 12c. Læs Hvorfor ikke bruge WM_CONCAT funktion i Oracle?
For pre-11g Release 2 kan du ikke bruge LISTAGG. Der er mange strengaggregeringsteknikker, se mit svar her .
Flere detaljer om Oracle String Aggregation Techniques