Se você não tem acesso a v$session você pode usar
select dbms_transaction.local_transaction_id from dual;
Isso só funciona dentro da sessão, mas não precisa de privilégios v$. Se retornar um valor não nulo, você iniciou uma transação. Isso normalmente significa alterações não confirmadas, mas há exceções. Se você emitiu um ponto de salvamento, alterou dados e voltou para o ponto de salvamento, a transação ainda 'vive'. Além disso, usar links de banco de dados inicia transações, mesmo apenas para seleções (ou costumavam fazer).