列出查询的所有列 (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)的表;