比如说这个sql是这样的
select a1.name,a1.type,a2.* from abc1 a1,abc2 a2 where a1.name1=a2.name2
这个语句可能很复杂,但一定是个查询语句,会有一个结果集,现在的问题是
在oracle中怎么能知道这个结果集都查到了哪些字段,及字段类型?如果是实际存在的表,我们可以查user_tab_cols ,但上面这个查询语句相当于是在查一个虚拟的表
我就是想知道这个用查询语句构造出来的虚拟的表中的所有字段,及类型。
select a1.name,a1.type,a2.* from abc1 a1,abc2 a2 where a1.name1=a2.name2
这个语句可能很复杂,但一定是个查询语句,会有一个结果集,现在的问题是
在oracle中怎么能知道这个结果集都查到了哪些字段,及字段类型?如果是实际存在的表,我们可以查user_tab_cols ,但上面这个查询语句相当于是在查一个虚拟的表
我就是想知道这个用查询语句构造出来的虚拟的表中的所有字段,及类型。
如果要看到具体的东西和实际的类型,你可以这样:
create table new_table as select a1.name,a1.type,a2.* from abc1 a1,abc2 a2 where a1.name1=a2.name2;
这样你就得到了一个新表new_table,表的内容就是查询语句的结果。具体类型view 下表就一目了然了。
根据这里得到字段
字段类型和源表中字段的类型匹配
可以从原表中查
也可以像楼上说的建个临时表
然后去user_tab_cols 中查
我现在是做了一个数据的管理平台,用户输入一个sql查询语句,我就返回这个sql一句查到的所有字段及类型,这只是功能的一部分。
因为不知道用户会输入多复杂的查询语句,有哪些表也都是未知的,解析sql的话,感觉不太现实,(因为可能会出现很复杂的sql),想知道是否有类似存放临时表的地方可以查到我要的信息?
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("select * from test");
pstmt.execute();
ResultSetMetaData rsmd = (ResultSetMetaData) pstmt.getMetaData();for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {
System.out.println(rsmd.getColumnName(i));
System.out.println(rsmd.getColumnClassName(i));
}如果你是用java的话可以参考完整代码http://bbs.inthirties.com/thread-99-1-1.html如果是其他的语言的话,可以到相关语言的版块问问。plsql也有解析sql的包,不过没有应用提供的api做的好。以前看过,现在找不到叻。建议里如果可以用应用做的话,这里给应用做。