2013-06-19 58 views
2

在Oracle中,有沒有一種方法可以選擇從具有別名的自定義查詢返回的所有列?舉個例子,假設我們有一個查詢,如下所示:從自定義子查詢中選擇列名稱/別名列表

SELECT FIRST_NAME AS COL1, LAST_NAME AS COL2, ADDRESS AS COL3 
    FROM PEOPLE 

我想知道,如果封裝查詢可以進行,將返回:

COL1 
    COL2 
    COL3 
+0

'SELECT * FROM(你的子查詢)'會做到這一點。 –

+0

我相信會返回類似於: def col1 col2 col3 end John Smith 123 ABC st。 Jane Doe 987 XYZ Rd。 – Mackers

+0

你的意思是你只想從查詢中得到別名列名,而不是實際結果? – OldProgrammer

回答

4

這裏是如何做到這一點在PL/SQL中。不知道是否只有直接的oracle SQL纔有可能。如有需要,您可以將其封裝在某種功能中。

DECLARE 
    TYPE RefCursor_Type IS REF CURSOR; 

    D_RefCur    RefCursor_Type; 
    D_DescriptionTable DBMS_SQL.DESC_TAB2; 
    D_ColumnCount  INTEGER; 
    D_CursorHandle  INTEGER; 
BEGIN 
    OPEN D_RefCur 
    FOR 'SELECT FIRST_NAME AS COL1, LAST_NAME AS COL2, ADDRESS AS COL3 FROM PEOPLE'; 

    D_CursorHandle := DBMS_SQL.to_cursor_number (D_RefCur); 

    DBMS_SQL.DESCRIBE_COLUMNS2 (D_CursorHandle, 
           D_ColumnCount, 
           D_DescriptionTable); 


    FOR idx IN 1 .. D_ColumnCount 
    LOOP 
     DBMS_OUTPUT.put_line (D_DescriptionTable (idx).col_name); 
    END LOOP; 
END; 
+0

謝謝!這正是我正在尋找的。 – Mackers

+0

沒問題。它很有趣,因爲我只需要使用DBMS_SQL包來獲取項目的查詢列數據。好時機! – OldProgrammer