解析JDBC Oracle索引列名称

时间:2015-02-18 11:44:50

标签: java oracle jdbc oracle11g

您是否有可能从索引中解析实际列名? 我用:

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

但我得到的是这样的事情:

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

我如何解决: SYS_NC00011 $

我使用 ojdbc6-11.2.0.4

2 个答案:

答案 0 :(得分: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$不会显示在该视图中。

答案 1 :(得分:0)

我会使用ResultSetMetadata -

ResultSetMetaData rsmd = rs.getMetaData();

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

}