列出查询的所有列 (Oracle)

Posted

技术标签:

【中文标题】列出查询的所有列 (Oracle)【英文标题】:List all columns of a query (Oracle) 【发布时间】:2016-12-23 19:41:59 【问题描述】:

Oracle 中是否有一个 SQL stmt 可以让我提取查询返回的所有列?

结合 Java,我可以执行查询并处理元数据,但我正在寻找一种方便的方法。

【问题讨论】:

你应该知道它们,因为你已经指定了查询。不要使用*。明确。 不一定:如果我使用以下查询会怎样? SELECT * FROM TBL_A A, TBL_B B WHERE A.ID = B.ID 查看如何列出表格的列:***.com/a/26977159/402322 如果您再解释一下您打算如何使用它,或者更好的是,如果您可以提供一些您需要的代码,您可能会得到更适合您需求的答案。例如,您是否正在寻找一种使用 JDBC API 获取此信息的方法? 我有很长的 SQL stmts,我想获取获取的列。 【参考方案1】:

试试这个:

DECLARE 

    sqlstr VARCHAR2(1000);
    cur INTEGER;
    columnCount INTEGER;
    describeColumns DBMS_SQL.DESC_TAB;

BEGIN 

    cur := DBMS_SQL.OPEN_CURSOR;
    sqlstr := 'SELECT * FROM TBL_A A, TBL_B B WHERE A.ID = B.ID';
    DBMS_SQL.PARSE(cur, sqlStr, DBMS_SQL.NATIVE);
    DBMS_SQL.DESCRIBE_COLUMNS(cur, columnCount, describeColumns);   
    FOR i IN 1..columnCount LOOP
        DBMS_OUTPUT.PUT_LINE ( describeColumns(i).col_name );
    END LOOP;
    DBMS_SQL.CLOSE_CURSOR(cur);

END;

更新:为了获得结果集,您可以这样做:

CREATE OR REPLACE TYPE VARCHAR_TABLE_TYPE AS TABLE OF VARCHAR2(30);

CREATE OR REPLACE FUNCTION GetColumns(sqlstr IN VARCHAR2) 
   RETURN VARCHAR_TABLE_TYPE PIPELINED AS

    cur INTEGER;
    columnCount INTEGER;
    describeColumns DBMS_SQL.DESC_TAB;

BEGIN 

    cur := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(cur, sqlStr, DBMS_SQL.NATIVE);
    DBMS_SQL.DESCRIBE_COLUMNS(cur, columnCount, describeColumns);   
    FOR i IN 1..columnCount LOOP
        PIPE ROW(describeColumns(i).col_name);
    END LOOP;
    DBMS_SQL.CLOSE_CURSOR(cur);
   RETURN;
END;


SELECT * FROM TABLE(GetColumns('SELECT * FROM TBL_A A, TBL_B B WHERE A.ID = B.ID'));

【讨论】:

别忘了在 SQL dev 中执行set serveroutput on 还有没有办法将describeColumns的值作为结果集返回?

以上是关于列出查询的所有列 (Oracle)的主要内容,如果未能解决你的问题,请参考以下文章

怎样在ORACLE中查询并列出所有含某一列名(如NAME)的表;

oracle 多表连接查询

有没有办法列出 ORACLE 查询中使用的表和列? [复制]

列出我的数据库中的所有表和列 (ORACLE)

oracle知识点

oracle 创建好了dblink之后,该如何列出远程数据库中所有表的清单,查询语句是啥。