【问题标题】:Oracle SQL: How to get the list of columns/fields for any given queryOracle SQL:如何获取任何给定查询的列/字段列表
【发布时间】:2014-09-18 05:49:09
【问题描述】:

我需要知道任何给定查询的列列表,我们该怎么做?查询可以是...

select * from some_tab1  (should return all the column names in some_tab1)
select col1, col2, col3 from some_tab2  (should return col1, col2, col3)
select col1 as 1, col2 as 2 from some_tab3  (should return 1, 2)

我知道如何获取给定表的列列表,但有没有办法获取给定查询的列列表,无论是否有数据?

感谢您的帮助!

【问题讨论】:

  • 可以,但是要根据环境而定。在什么环境下需要知道查询列(PL/SQL、Java程序、C#程序等)?
  • 我不确定我是否理解您在做什么。您将查询作为字符串,并且想要解析它以获取结果集的列列表?你看过dbms_sql吗?
  • 澄清一下,您不是在尝试查找由某种应用程序(如 peoplesoft 查询)中保存的查询访问的列,对吧?
  • 您可以在 PL/SQL 中使用dbms_sql.describe_columns 来获取此信息。否则,您的编程语言将具有相应的功能(例如 JDBC 的 ResultSetMetaData

标签: sql oracle


【解决方案1】:

Oracle 的 DESCRIBE 命令不支持这一点。我认为您可以获得的最接近(无需编写自定义命令)是使用高级宿主语言从查询中获取 1 条记录,然后迭代结果列,或者从查询创建视图或临时表并描述那。后者类似于:

create table t$$desc as 
   select * from some_tab1  (should return all the column names in some_tab1)
   where 1 = 0
;

desc t$$desc

如果您使用 JDBC 或 ADO 或其他一些宿主语言,您可以获取查询的“模式”。 DataReader 之类的东西支持 .GetSchema() 方法,该方法返回一个描述结果集架构的对象。示例在这里:Get the schema for a table

【讨论】:

    【解决方案2】:

    这可以通过...来完成

    dbms_sql.describe_columns3(dbms_sql.to_cursor_number(rc), count, tab);

    其中 rc 是 sql 的引用光标。 count 是返回列计数的输出参数,tab 是实际的输出集合。

    感谢@Alex Poole 和@a_horse_with_no_name

    【讨论】:

      猜你喜欢
      • 2019-08-16
      • 2021-12-26
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2020-05-01
      相关资源
      最近更新 更多