set linesize 150

column username format a20
column bi format 99
column bs format 9999
column siw format 999999
column rwo# format 99999999
column tl format a5
column inst_id format a10

with sessions
as ( select /*+ MATERIALIZE */
            inst_id, sid, serial#, username, sql_id, blocking_instance bi, blocking_session bs, 
            seconds_in_wait siw, row_wait_obj# rwo#,  row_wait_file# rwf#, row_wait_block# rwb#,
            row_wait_row# rwr#
     from gv$session
   )
select lpad('-', level, '-') || inst_id inst_id, sid, serial#, username, sql_id, bi, bs, siw, rwo#,  
       rwf#, rwb#, rwr#
from sessions
where bs is not null
      or (inst_id, sid) in
        ( select bi, bs
          from sessions
        )
start with bs is null
connect by ( bi = prior inst_id
             and bs = prior sid
           )
;


/*
FUNCTION ROWID_CREATE RETURNS ROWID
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 ROWID_TYPE                     NUMBER                  IN
 OBJECT_NUMBER                  NUMBER                  IN
 RELATIVE_FNO                   NUMBER                  IN
 BLOCK_NUMBER                   NUMBER                  IN
 ROW_NUMBER                     NUMBER                  IN

select dbms_rowid.rowid_create(1, 81574, 26, 286, 262) from dual;
*/