【问题标题】:oracle read column names from select statementoracle 从 select 语句中读取列名
【发布时间】:2017-04-29 11:00:28
【问题描述】:

我想知道如何在 oracle 中读取列名。好的,我知道有一个名为 USER_TAB_COLUMNS 的表提供了有关它的信息,但是如果我有 2 或 3 级嵌套查询并且我不知道列名。或者我只是使用 join 语句进行简单查询,我想获取列名。怎么做?任何idey?

select * from person a
join person_details b where a.person_id = b.person_id

谢谢

【问题讨论】:

  • 请问您为什么不知道列名?在不知道架构细节(包括列名)的情况下,编写查询会很困难。
  • 我想在 java 中编写抽象方法,它只获取查询并返回“assoc map”或类似的东西。所以我不知道我会传递给它什么样的查询。因此,当我们将 select 语句传递给 PL/Sql 开发人员时,它会为我们完成这项工作。我需要知道它是如何做到的。
  • 在 Java 和 .Net 中,您都有可以为您处理这些问题的库。对于 Java,请参阅此问题:stackoverflow.com/questions/1194971/dataset-class-in-java。对于 .Net,请查看 DataTable,请参阅 msdn.microsoft.com/en-us/library/…。这适用于 Oracle、SQL Server 等。这是您要找的吗?

标签: oracle select names


【解决方案1】:

我会去:

select 'select ' || LISTAGG(column_name , ',') within group (order by column_id) || ' from T1' 
  from user_tab_columns 
  where table_name = 'T1';

从数据库中获取查询。要获取具有类型的列来填充地图,您可以使用:

select column_name , data_type
      from user_tab_columns 
      where table_name = 'T1';

【讨论】:

    【解决方案2】:

    我假设您正在寻找这个:

    DECLARE
    
        sqlStr VARCHAR2(1000);
        cur INTEGER;
        columnCount INTEGER;
        describeColumns DBMS_SQL.DESC_TAB2;
    
    BEGIN
        sqlStr := 'SELECT a.*, b.*, SYSDATE as "Customized column name" 
                  FROM person a JOIN person_details b 
                  WHERE a.person_id = b.person_id';
    
        cur := DBMS_SQL.OPEN_CURSOR;
        DBMS_SQL.PARSE(cur, sqlStr, DBMS_SQL.NATIVE);
        DBMS_SQL.DESCRIBE_COLUMNS2(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;    
    

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      相关资源
      最近更新 更多