select case db_stat_name when 'parse time elapsed' then 'soft parse time' else db_stat_name end db_stat_name, case db_stat_name when 'sql execute elapsed time' then time_secs - plsql_time when 'parse time elapsed' then time_secs - hard_parse_time else time_secs end time_secs, case db_stat_name when 'sql execute elapsed time' then round(100 * (time_secs - plsql_time) / db_time,2) when 'parse time elapsed' then round(100 * (time_secs - hard_parse_time) / db_time,2) else round(100 * time_secs / db_time,2) end pct_time from (select stat_name db_stat_name, round((value) / 1000000,3) time_secs from v$sys_time_model where stat_name not in('DB time','background elapsed time','background cpu time','DB CPU')), (select round((value) / 1000000,3) db_time from v$sys_time_model where stat_name= 'DB time'), (select round((value) / 1000000,3) plsql_time from v$sys_time_model where stat_name = 'PL/SQL execution elapsed time'), (select round((value) / 1000000,3) hard_parse_time from v$sys_time_model where stat_name = 'hard parse elapsed time') order by 2 desc;