look at either joining sort info
or having a heuristic to collect if
direct path reads are found

GV$SORT_USAGE
select
x$ktsso.inst_id,         -- INST_ID NUMBER
username,                -- USER VARCHAR2(30)
ktssoses,                -- SESSION_ADDR RAW(4)
ktssosno,                -- SESSION_NUM NUMBER
prev_sql_addr,           -- SQLADDR RAW(4)
prev_hash_value,         -- SQLHASH NUMBER
ktssotsn,                -- TABLESPACE VARCHAR2(31)
decode                   -- CONTENTS VARCHAR2(9)
  (ktssocnt, 0, 'PERMANENT', 1, 'TEMPORARY'),
decode                   -- SEGTYPE VARCHAR2(9)
  (ktssosegt, 1, 'SORT', 2, 'HASH', 3, 'DATA', 4, 'INDEX', 5, 'LOB_DATA', 6, 'LOB_INDEX', 'UNDEFINED'),
ktssofno,                -- SEGFILE# NUMBER
ktssobno,                -- SEGBLK# NUMBER
ktssoexts,               -- EXTENTS NUMBER
ktssoblks,               -- BLOCKS NUMBER
ktssorfno                -- SEGRFNO# NUMBER
from
x$ktsso,
v$session 
where
ktssoses = v$session.saddr and ktssosno = v$session.serial# 

ORT_USAGE
select
x$ktsso.inst_id,         -- INST_ID NUMBER
username,                -- USER VARCHAR2(30)
ktssoses,                -- SESSION_ADDR RAW(4)
ktssosno,                -- SESSION_NUM NUMBER
prev_sql_addr,           -- SQLADDR RAW(4)
prev_hash_value,         -- SQLHASH NUMBER
ktssotsn,                -- TABLESPACE VARCHAR2(31)
decode                   -- CONTENTS VARCHAR2(9)
  (ktssocnt, 0, 'PERMANENT', 1, 'TEMPORARY'),
decode                   -- SEGTYPE VARCHAR2(9)
  (ktssosegt, 1, 'SORT', 2, 'HASH', 3, 'DATA', 4, 'INDEX', 5, 'LOB_DATA', 6, 'LOB_INDEX', 'UNDEFINED'),
ktssofno,                -- SEGFILE# NUMBER
ktssobno,                -- SEGBLK# NUMBER
ktssoexts,               -- EXTENTS NUMBER
ktssoblks,               -- BLOCKS NUMBER
ktssorfno                -- SEGRFNO# NUMBER
from
x$ktsso,
v$session 
where
ktssoses = v$session.saddr and ktssosno = v$session.serial#