De basissyntaxis van LISTAGG is:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
In jouw geval, aangezien je een subquery als resultaat hebt ingesteld op WM_CONCAT
, kunt u dezelfde subquery plaatsen in plaats van col_name_to_be_aggregated
in LISTAGG .
Ik denk dat je ook alle VERVANG . kunt verwijderen functies, aangezien LISTAGG het scheidingsteken . kan accepteren van jouw keuze.
Probeer,
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)
Ook wil ik uitleggen waarom u in 12c naar LISTAGG moet verhuizen. Sinds t is verwijderd uit de nieuwste 12c-versie. Daarom zal elke toepassing die op de WM_CONCAT-functie heeft vertrouwd, niet werken nadat deze is geüpgraded naar 12c. Lees Waarom WM_CONCAT niet gebruiken functie in Oracle?
Voor pre-11g Release 2 kunt u LISTAGG niet gebruiken. Er zijn veel technieken voor stringaggregatie, bekijk mijn antwoord hier .
Meer details over Oracle String Aggregation-technieken