Как получить список полей индекса в Oracle 9i ?

nav7000
Дата: 11.08.2005 10:07:49
Для получения информации об индексах и их полях в Oracle 8i можно было воспользоваться системными просмотрами all_indexes и all_ind_columns:
из all_indexes можно получить информацию об индексах заданной таблицы, а в all_ind_columns содержится информация о полях индекса, например такой запрос возвращает имена полей индекса IDX_ABC:
select column_name from all_ind_columns where index_name='IDX_ABC' and table_owner = 'USER'
НО, в Oracle 9i в поле column_name содержится не само имя поля, а некий код, например такой SYS_NC00042$.
Каким образом можно по этому коду получить "настоящее" имя поля ?
А может быть, кто-то знает более корректный способ получения данной информации (списка индексов для таблицы и списка полей индекса), т.е. такой способ, которые даёт верный результат независимо от версии Oracle?
Заранее благодарю.
Stax.
Дата: 11.08.2005 10:17:31
посмотрите в сторону %_IND_EXPRESSIONS
ЗЫ
скрипта не имею
nata1111
Дата: 11.08.2005 10:25:11
если column_name =SYS_NC00042$, скорее всего у вас используются вложенные или объектные таблицы
В этом случае SYS_NC00042$ и есть поле, посмотреть на него можно используя подсказку
/*+NESTED_TABLE_GET_REFS+*/
alex-ls
Дата: 11.08.2005 10:28:22
COLUMN_NAME
 VARCHAR2(4000)
  Column name or attribute of object type column
 
Note: If you create an index on a user-defined REF column, the system creates
the index on the attributes that make up the REF column. Therefore, the column
names displayed in this view are the attribute names, with the REF column name
as a prefix, in the following form:
SQLap
Дата: 11.08.2005 11:19:57
select a.column_expression from all_ind_expressions a where a.index_name = <индекс_name>
nav7000
Дата: 11.08.2005 11:29:51
Спасибо всем высказавшимся по данному вопросу!
Да, действительно выборка из all_ind_expressions решает проблему.
Исследуя дальше данную проблему, я обнаружил, что она имеет место только для полей определённых с модификатором DESC т.е. по котороым построен индекс по убыванию.. для полей, индекс по которым сделан по возрастанию, в all_ind_columns фигурирует правильное имя поля.
А для DESC - полей очевидно строится индекс по выражению..
Так что прошу прощения за то, что не предоставил полной информации в вопросе. И ещё раз спасибо.