views:

47

answers:

1

Is it possible to have a look at what is there inside an index using SQL*Plus?

If I have a table like this:

Table A
------------------------
rowid  |  id   name
123    |  1    A
124    |  4    G
125    |  2    R
126    |  3    P

where id is the primary key, I expect the index to be something like this

index on A.id
-------------
id  rowid
1   123
2   125
3   126
4   124

Is there some SQL query using which I can actually see the contents of an index?

+3  A: 

There's not a simple query - you can dump table or index blocks to trace files, but you have to identify the block you're interested in. Dion Cho has an example of how you can process this block dump with SQL, but it's not for the faint of heart.

However, you can do this:

select /* index_ffs (a [name of index]) */
       id, rowid 
  from a
 where id is not null
 order by id, rowid;

Oracle doesn't write index entries where all of the values being indexed are null, so if id is nullable, we need to filter those out. The index_ffs hint forces Oracle to satisfy the query reading the index blocks, not the data blocks. This "solution" doesn't show the data which would be in root or branch blocks, whereas a block dump can.

Adam Musch