解析 JDBC Oracle 索引列名称
Resolve JDBC Oracle Index Column Names
您好,是否有可能从索引中解析出真实的列名?
我使用:
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
我会使用 ResultSetMetadata -
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
System.out.println(rsMetaData.getColumnName(i));
}
该索引是一个基于函数(表达式)的索引。
该名称引用的表达式存储在系统视图中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$
不会显示在该视图中。
您好,是否有可能从索引中解析出真实的列名? 我使用:
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
我会使用 ResultSetMetadata -
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
System.out.println(rsMetaData.getColumnName(i));
}
该索引是一个基于函数(表达式)的索引。
该名称引用的表达式存储在系统视图中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$
不会显示在该视图中。