bimal maity schrieb am 20.12.2023 um 04:35:
> Hi,
>
> I have below query used in Oracle but while migrating to Postgres this code is not supported in Postgres.
> Could you please tell me how to resolve this?
>
> SELECT p.id_po, p.line_number, replace(replace(replace(RTRIM(XMLAGG(XMLELEMENT(name C,
regexp_replace(p.protocol_number,'([[:cntrl:]])','','g'))ORDER BY 1), ',' ) ,'</C><C>','/'),'<C>',''),'</C>','') AS
protocol_number
> ,replace(replace(replace(RTRIM(XMLAGG(XMLELEMENT(name C,
regexp_replace(p.protocol_status,'([[:cntrl:]])','','g'))ORDER BY 1), ',' ) ,'</C><C>','/'),'<C>',''),'</C>','') AS
protocol_status
> ,replace(replace(replace(RTRIM(XMLAGG(XMLELEMENT(name C,
regexp_replace(p.protocol_approver,'([[:cntrl:]])','','g'))ORDER BY 1), ',' ) ,'</C><C>','/'),'<C>',''),'</C>','') AS
protocol_approver
> ,max(p.protocol_date) AS protocol_date
> ,replace(replace(replace(RTRIM(XMLAGG(XMLELEMENT(name C,
regexp_replace(p.protocol_nota,'([[:cntrl:]])','','g'))ORDER BY 1), ',' ) ,'</C><C>','/'),'<C>',''),'</C>','') AS
protocol_nota
> ,sum(coalesce(p.protocol_value,0)) protocol_value
> FROM podl_extended_protocol p
> where upper(p.protocol_status) not in ('REJEITADO','ELIMINADO')
> group by p.id_po, p.line_number
What exactly does it do? I have often seen the hack using xmlagg/xmlelement/regexp_replace to do some kind of poor
man'sunnest/string_agg.
If you tell us, what exactly the goal is, I am confident there is a better solution in Postgres.