2015-02-18 2 views
0

Привет, есть ли возможность разрешить имена реальных столбцов из индекса? я использую:Уточнить имена столбцов индекса Oracle JDBC

java.sql.DatabaseMetaData.getIndexInfo(String, String, String, boolean, boolean) 

Но я получаю Somthing так:

[table=LOG_EMAIL, name=LOG_EMAIL_USERS_ID, columns=[SYS_NC00011$ A], unique=false] 

Как я разрешить: SYS_NC00011 $

Я использую ojdbc6-11.2.0.4

+0

Зачем вам это нужно? И почему вы используете JDBC API? Имя столбца выглядит как «задуманное» имя для некоторого функционального индекса. Попробуйте использовать dbms_metadata.get_ddl. – ibre5041

+0

Мне нужно, чтобы проверить ERM и DB. И я использую JDBC, потому что мы используем и другие БД. – Kani

+0

Я боюсь, что это невозможно сделать с помощью JDBC API. Вам понадобится часть, зависящая от поставщика базы данных. – ibre5041

ответ

2

Этот индекс является индексом функции (выражения).

Выражение, которое ссылается на это имя хранится в представлении системы user_ind_expressions:

select column_expression 
from user_ind_expressions 
where index_name = 'LOG_EMAIL_USERS_ID' 
    and column_position = 1; 

Если у вас есть более одного выражения в индексе у вас есть несколько строк в user_ind_expressions с различными значениями для column_position (первое выражение равно 1, второе - 2 и т. д.). Название SYS_NC00011$ не будет отображаться в этом представлении.

+0

Вы также знаете, где я могу найти сортировку? Oracle возвращает null вместо A или D для индексов, основанных на функциях. – Kani

+0

Это должно быть значение столбца 'ORDINAL_POSITION', возвращаемого' getIndexInfo() ', но я не уверен, что column_position ссылается на все столбцы в индексе или только на основе функций. –

+0

это не «ORDINAL_POSITION short => порядковый номер столбца в индексе, ноль, когда TYPE является tableIndexStatistic« должно быть: »ORDINAL_POSITION short => порядковый номер столбца в индексе, ноль, когда TYPE is tableIndexStatistic« .... это значение null, но это должно быть desc – Kani

0

Я бы использовал ResultSetMetadata -

ResultSetMetaData rsmd = rs.getMetaData(); 

for (int i = 1; i <= rsmd.getColumnCount(); i++) { 
    System.out.println(rsMetaData.getColumnName(i)); 

} 
+1

И как именно 'ResultSetMetaData' возвращает информацию об индексе таблицы? –

Смежные вопросы