Is there any view or table to show how long a session have been in Idle state in Oracle?
Yes, v$session stores this information.

v$session.LAST_CALL_ET:


  If the session STATUS is currently ACTIVE, then the value represents
  the elapsed time in seconds since the session has become active. If
  the session STATUS is currently INACTIVE, then the value represents
  the elapsed time in seconds since the session has become inactive.


Documentation link.