比如说这个sql是这样的
select a1.name,a1.type,a2.* from abc1 a1,abc2 a2 where a1.name1=a2.name2 
这个语句可能很复杂,但一定是个查询语句,会有一个结果集,现在的问题是
在oracle中怎么能知道这个结果集都查到了哪些字段,及字段类型?如果是实际存在的表,我们可以查user_tab_cols  ,但上面这个查询语句相当于是在查一个虚拟的表
我就是想知道这个用查询语句构造出来的虚拟的表中的所有字段,及类型。

解决方案 »

  1.   

    你得到的字段应该就是a1.name,a1.type,a2.*,类型是在abc1、abc2中的类型。
    如果要看到具体的东西和实际的类型,你可以这样:
    create table new_table as select a1.name,a1.type,a2.* from abc1 a1,abc2 a2 where a1.name1=a2.name2;
    这样你就得到了一个新表new_table,表的内容就是查询语句的结果。具体类型view 下表就一目了然了。
      

  2.   

    select a1.name,a1.type,a2.* from 
    根据这里得到字段
    字段类型和源表中字段的类型匹配
    可以从原表中查
    也可以像楼上说的建个临时表
    然后去user_tab_cols 中查
      

  3.   

    abc1 a1,abc2 a2这两个表楼主知道了,那里面的类型会不知道吗,因该是一样的才对。
      

  4.   

    那就是说我还要把这个sql解析了?
    我现在是做了一个数据的管理平台,用户输入一个sql查询语句,我就返回这个sql一句查到的所有字段及类型,这只是功能的一部分。
    因为不知道用户会输入多复杂的查询语句,有哪些表也都是未知的,解析sql的话,感觉不太现实,(因为可能会出现很复杂的sql),想知道是否有类似存放临时表的地方可以查到我要的信息?
      

  5.   

    如果是应用的,应用对应的api应该有这样的方式来调用的,比如说javajava里可以通过ResultSetMetaData这个类来得到返回的resultset的结果集的meta信息的。比如
    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做的好。以前看过,现在找不到叻。建议里如果可以用应用做的话,这里给应用做。
      

  6.   

    在s2010里,不建表和视图怎么获取(select a1.name,a1.type,a2.* from abc1 a1,abc2 a2 where a1.name1=a2.name2  )表的字段类型啊