这是一个容易被忽视的问题。
结果如下:INDEX_NAME COLUMN_NAME DESCEND
------------------------------ ------------------------------ --------
IDX1 SYS_NC00004$ DESC
IDX1 SYS_NC00005$ DESC
IDX2 A ASC
IDX2 B ASC
IDX3 A ASC
IDX3 SYS_NC00005$ DESC
可见当索引列定义为DESC时,user_ind_columns.COLUMN_NAME并不能正确显示列名。 结果如下:
INDEX_NAME TABLE_NAME COLUMN_EXPRESSION COLUMN_POSITION
------------------------------ ------------------------------ ------------------------------ ---------------
IDX1 T1 "A" 1
IDX1 T1 "B" 2
IDX3 T1 "B" 2
从user_ind_expressions视图可以查询到索引列名。Oracle把DESC定义的索引作为函数索引,所以看到的是加了引号的列名,被当做函数表达式。
从以上分析得知,可以关联user_ind_columns和user_ind_expressions查询出所有索引列名称。这时又遇到一个问题,COLUMN_EXPRESSION列是LONG类型的,不能使用普通的函数进行处理,需要先建立一个转换函数,把LONG转换成VARCHAR。