2016-12-14 46 views
0

我不知道如何讀取oracle中的列名。好吧,我知道有名爲USER_TAB_COLUMNS的表給出了關於它的信息,但是如果我有2或3級嵌套查詢並且我不知道列名。或者我只是簡單的查詢與聯合聲明,我想獲得列名稱。怎麼做?任何想法?oracle從select語句中讀取列名

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

感謝

+1

請問,爲什麼你不知道的列名?如果不知道模式的細節,包括列名,寫查詢將會很困難。 –

+0

我想在java中編寫抽象方法,它只是查詢並返回「assoc map」或類似的東西。所以我不知道我會傳遞給它什麼樣的查詢。因此,當我們將select語句傳遞給它時,PL/Sql開發人員爲我們完成了這項工作。我需要知道它是如何做到這一點的。 – gogagubi

+1

請參閱:http://stackoverflow.com/questions/8739203/oracle-query-to-fetch-column-names –

回答

0

我會去:

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'; 
0

我假定你正在尋找這樣的:

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;