The long running procedure had multiple queries, the upgrade affected couple of the queries.
The below steps have resolved the issue
1) Gather Latest stats
Initially post upgrade I have gathered stats with
dbms_stats.gather_table_stats(ownname => USER, tabname => 'XYZ',
method_opt=> 'for all indexed columns size skewonly', granularity => 'ALL', degree => 8 ,
cascade => true,estimate_percent => 15);
From William's comment I explored method_opt parameter more and chosing the method opt 'for all indexed columns size skewonly' is not the right strategy here so instead I have gone with Oracle's default 'F FOR ALL COLUMNS SIZE AUTO' and also removed estimate_percent so that it picks Default
dbms_stats.gather_table_stats(ownname => USER, tabname => 'XYZ',
granularity => 'ALL', degree => 8 ,
cascade => true);
2) Another query which was using an inline view and this view was embedded in a lengthy/complex query this shows a lag while reading from Temp space , not sure if this is due to some parameter change or due to some algorithm change with 18c but to bypass this have broken the query into smaller chunks and used global temporary table to insert data of inline view as first step and then instead of inline view read data from GTT this has solved the slow running issue.
If you see query slowness/plan flips post an Oracle upgrade two broad steps I could advise is
a) Check the parameter settings if there are any obvious parameter changes that might have happened in DB which causes the Optimizer to work in a different way
b) Gather complete table/schema stats.