我使用ojdbc7.jar从Java连接Oracle,对于带别名的查询,当我做ResultSetMetaData的getColumnName()和getColumnLabel()时,都返回别名,我希望有原始的列名。
ResultSetMetaData
getColumnName()
getColumnLabel()
sdnqo3pr1#
这是不可能的。如果你写了一个查询,将列(或函数)别名为其他名称,当结果集被传递到下一级(另一个查询,如在视图中,或JDBC/ODBC调用)时,系统拥有的关于该查询的元数据只是别名。找到原始名称的唯一方法是追踪正在使用的SQL到它的起源(例如,如果它正在调用一个视图,查找视图定义,等等)。假设一个视图将一个列别名化为其他内容(实际上就是您正在做的事情,因为视图只是一个按需执行的存储SQL)。该列的视图定义将只有别名名称(它实际上是以这种方式存储在dba_tab_columns中的),而不是原始名称。除非查看视图定义,否则您无法知道原始名称。
1条答案
按热度按时间sdnqo3pr1#
这是不可能的。如果你写了一个查询,将列(或函数)别名为其他名称,当结果集被传递到下一级(另一个查询,如在视图中,或JDBC/ODBC调用)时,系统拥有的关于该查询的元数据只是别名。
找到原始名称的唯一方法是追踪正在使用的SQL到它的起源(例如,如果它正在调用一个视图,查找视图定义,等等)。
假设一个视图将一个列别名化为其他内容(实际上就是您正在做的事情,因为视图只是一个按需执行的存储SQL)。该列的视图定义将只有别名名称(它实际上是以这种方式存储在dba_tab_columns中的),而不是原始名称。除非查看视图定义,否则您无法知道原始名称。